LIMIT和分组依据?如何按国家/地区返回收入最低的100位客户? SQL

问题描述 投票:-2回答:1

[嗨,我有一个表数据库1

3列:customer_id,收入,国家/地区

Customer_id
1001
1002
...

Income
5000
6000
7000

Country
SG
HK
VN
...

如何编写查询,以返回每个国家/地区中收入最低的100位客户?

是否可以返回:

Customer ID | country code
1003          SG
1004          SG
... 
1007          VN
... 

依此类推

谢谢!

mysql sql greatest-n-per-group
1个回答
3
投票

在mySQL 8上,您可以利用窗口功能:

SELECT * FROM
(
 SELECT 
  country,
  customer_id,
  row_number() over(partition by country order by income asc) earn_rank
 FROM table
)x
WHERE x.earn_rank <= 100

您可以想到,此窗口函数将按国家/地区然后按收入对行进行排序,然后从1开始计数。每次国家/地区更改时,行号将从1重新开始。这意味着,对于每个国家/地区,将有一个编号为1(收入最低的行)和一个编号为2、3的行。如果然后将其包装在另一个外部查询中,该查询仅选择数字小于101的行,则得到每个国家100行

© www.soinside.com 2019 - 2024. All rights reserved.