查找一列n值最大(Find n largest values in a column )

2019-09-23 10:00发布

我试图在SQL Server中的特定列找n个最大的数字。

我们可以找到一列中的最大值,轻松地第2大值。

但我怎么觉得说,一列5个大价值?

Answer 1:

在MySQL中,你可以使用[LIMIT {[offset,] row_count }]做到这一点,像这样:

...
ORDER BY SomeField DESC
LIMIT @n; 

对于SQL Server,你可以使用TOP(n)来获取前n:

SELECT TOP(@n) SomeFieldName
FROM TABLE
ORDER BY SomeField DESC

例如:

SELECT TOP 5 items_sold
FROM tbl_PRODUCT 
ORDER BY items_sold dESC

更新:如果您有其他表families有一个外键family_ID到产品表,你想找到与前n个家庭ID的所有产品。 然后,你可以点这一点:

   SELECT *
   FROM Products WHERE family_ID  IN
   (
       SELECT TOP 5 family_ID
       FROM families
       ORDER BY family_ID DESC
   )

更新2:在每个家庭最顶端的产品:

;WITH cte
AS
(
    SELECT *, 
    ROW_NUMBER() OVER(PARTITION BY family_ID ORDER BY items_sold DESC) row_num
    FROM @Products
)
SELECT * FROM cte
where row_num = 1
Order by family_ID

这是活着的演示



Answer 2:

您标记此既为MySQL和SQL服务器。 在SQL Server,你可以使用TOP

SELECT TOP 5 yourColumn
FROM yourTable
ORDER BY someColumn DESC;

TOP限制返回的行数。 要获得最大/最小的值的数据,你会想包括ORDER BY

在MySQL中,你将使用LIMIT

另一种方式在SQL Server中做到这一点是使用row_number()

select id
from 
(
  select id, row_number() over(order by id desc) rn
  from yourtable
) x
where rn <= 5

请参阅SQL拨弄演示



Answer 3:

SQL服务器

select min(val)
 from your_table
where val in (select top 5 val from your_table  order by val desc)

MySQL的

select min(val)
 from your_table
where val in (select val from your_table  order by val desc limit 5)


文章来源: Find n largest values in a column