在列中查找n个最大值

时间:2012-10-03 09:42:08

标签: sql sql-server sql-server-2008

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

我们可以轻松找到列中的最大值和第二大值。

但是如何在列中找到5个最大值?

3 个答案:

答案 0 :(得分:3)

您为MySQL和SQL Server都标记了这一点。在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 Fiddle With Demo

答案 1 :(得分:2)

在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

Here is alive demo

答案 2 :(得分:0)

sql server

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)