首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一列中查找n个最大值

在一列中查找n个最大值
EN

Stack Overflow用户
提问于 2012-10-03 17:42:08
回答 3查看 5K关注 0票数 3

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

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

但是我如何在一列中找到比如说5个最大的值呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-03 17:43:49

在MySql中,您可以使用[LIMIT {[offset,] row_count }]这样做:

代码语言:javascript
运行
复制
...
ORDER BY SomeField DESC
LIMIT @n; 

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

代码语言:javascript
运行
复制
SELECT TOP(@n) SomeFieldName
FROM TABLE
ORDER BY SomeField DESC

例如:

代码语言:javascript
运行
复制
SELECT TOP 5 items_sold
FROM tbl_PRODUCT 
ORDER BY items_sold dESC

更新:如果您有另一个表families,其中包含products表的外键family_ID,并且您想要查找具有前n个系列id的所有产品,那么您可以这样做:

代码语言:javascript
运行
复制
   SELECT *
   FROM Products WHERE family_ID  IN
   (
       SELECT TOP 5 family_ID
       FROM families
       ORDER BY family_ID DESC
   )

更新2:每个系列中最顶尖的产品:

代码语言:javascript
运行
复制
;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
EN

Stack Overflow用户

发布于 2012-10-03 17:44:38

您为MySQL和SQL Server都添加了标记。在SQL Server中,您可以使用TOP

代码语言:javascript
运行
复制
SELECT TOP 5 yourColumn
FROM yourTable
ORDER BY someColumn DESC;

TOP限制返回的行数。要获得具有最大/最小值的数据,您需要包含一个ORDER BY

在MySQL中,您将使用LIMIT

在SQL Server中执行此操作的另一种方法是使用row_number()

代码语言:javascript
运行
复制
select id
from 
(
  select id, row_number() over(order by id desc) rn
  from yourtable
) x
where rn <= 5

请参阅SQL Fiddle With Demo

票数 3
EN

Stack Overflow用户

发布于 2012-10-03 17:50:14

sql服务器

代码语言:javascript
运行
复制
select min(val)
 from your_table
where val in (select top 5 val from your_table  order by val desc)

mysql

代码语言:javascript
运行
复制
select min(val)
 from your_table
where val in (select val from your_table  order by val desc limit 5)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12705789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档