[嗨,我有一个表数据库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 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行