我试图在SQL Server的特定列中找到n个最大的数字。
我们可以轻松找到列中的最大值和第二大值。
但是如何在列中找到5个最大值?
答案 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
答案 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
答案 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)