3

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

我们可以很容易地找到一列中的最大值和第二个最大值。

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

4

3 回答 3

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

于 2012-10-03T09:44:37.953 回答
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

这是现场演示

于 2012-10-03T09:43:48.763 回答
0

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)
于 2012-10-03T09:50:13.593 回答