mysql - 如何从“分组依据”方法中查找前 N 条记录,其中 N 条记录可以包含多个值?
问题描述
我正在练习W3 School SQL Tables。从Customers
表中,我可以通过以下 SQL 选择每个国家/地区的客户数量
select country, count(*) as NumOfCustomer
from Customers
group by country
order by NumOfCustomer Desc;
这给了我这样的结果:
如果我想选择客户最多的前 5 个国家/地区,我无法使用Limit 5
,因为Germany and France
客户数量第二多,客户Mexico and Spain
数量第五多。使用限制 5 将不包括Mexico and Spain
如何获得包含所有N
最高值的结果,其中最高值可以N
像以前一样重复第一个数字?
解决方案
你可以使用DENSE_RANK
:
返回当前行在其分区中的排名,没有间隙。同行被视为平局并获得相同的排名。此功能为对等组分配连续等级;结果是大小大于一个的组不会产生不连续的秩数
WITH cte AS (
select country, count(*) as NumOfCustomer
from Customers
group by country
), cte2 AS (
SELECT *, DENSE_RANK() OVER(ORDER BY NumOfCustomer DESC) AS rnk
FROM cte
)
SELECT *
FROM cte2
WHERE rnk <= 5
ORDER BY NumOfCustomer DESC
推荐阅读
- ms-word - MS Word:将纯文本引用转换为链接引用
- django - 'django_1 | 运行 docker-compose up 后没有要连接的端口 [s]
- javascript - WebGL OpenGL 形状的绘制顺序错误
- winapi - 在 windows 中关闭显示器
- firebase - 流和 firebase 状态不佳的问题:DocumentSnapshotPlatform 中不存在字段
- javascript - node.js eventEmitter setImmediate vs. async
- javascript - 我不确定为什么即使代码昨天工作它也无法读取属性“id”
- c++ - 如何创建一个可变参数结构,它采用与 ctor 参数相同的数量的“可变参数调用”?
- r - R Markdown:有没有办法在控制台运行时打印出源文件的代码(而不是 Rmd 文件本身)?
- pytorch - 计算pytorch张量中的唯一元素