我正在与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
个数字可以像以前一样重复最大值?
答案 0 :(得分:1)
您可以使用DENSE_RANK
:
返回当前行在其分区内的位置,没有空格。 对等体被视为纽带,并获得相同的排名。此功能将连续的排名分配给对等体组;结果是,大小大于1的组不会产生不连续的等级编号
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