sql - 从表中选择前 N 个随机行,然后按列排序

标签 sql sql-server select random

我需要从表中随机获取 3 行,然后按 BannerWeight 列对这些行进行排序。

如果数据是:

BannerID     BannerWeight
   1               5
   2               5
   3               10
   4               5
   5               10

我想要的结果是:

BannerID     BannerWeight
   5               10
   2               5
   4               5

到目前为止我已经:

SELECT TOP 3 b.BannerID, b.BannerWeight FROM CMS_Banner b
INNER JOIN CMS_BannerCategory c ON b.BannerCategoryID = c.BannerCategoryID
WHERE c.BannerCategoryName LIKE 'HomepageSponsors'
ORDER BY NEWID()

我只是不知道如何在获得这 3 个随机行后对其进行排序。我尝试过这样做

 ORDER BY BannerWeight, NEWID()

但这只会得到 3 个随机行,其中 BannerWeight 为 5。

这是一个 SQLFiddle:http://sqlfiddle.com/#!6/a8088/2/0

最佳答案

最简单的选择(我认为)是使用子查询:

Select * from 
    (
    SELECT TOP 3 b.BannerID, b.BannerWeight FROM Banners b
    ORDER BY NEWID()
    ) a
order by a.bannerweight

关于sql - 从表中选择前 N 个随机行,然后按列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31689009/

相关文章:

mysql - 内连接关键字搜索的SQL数据库索引设计

mysql - 如何查找另一个表中不存在的内容?

sql - sql中count(*)和count(1)有什么区别?

SQL DENSE_RANK 和 PARTITION BY

sql - 如何以日期为列动态旋转

css - 如何更改所选选项文本的颜色?

SQL:如何使用约束强制执行函数依赖?

c# - DapperExtensions在插入操作时产生“无效的对象名称”

mysql - SQL 选择语句

mysql - 从两个表中选择,在两个表中按日期排序