LIMIT и Group By? Как вернуть 100 самых низкооплачиваемых клиентов по странам? SQL - PullRequest
0 голосов
/ 21 марта 2020

Привет, у меня есть база данных таблиц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
... 

Так далее

Спасибо!

1 Ответ

3 голосов
/ 21 марта 2020

На 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 et c. Если затем мы завернем его в другой внешний запрос, который выбирает только строки, число которых меньше 101, мы получим 100 строк на страну

...