Sql предел записи сгруппирован - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть таблица «Игроки». В этой таблице столбцы 'ID','surname','nation' Мне нужен запрос, и в результате должен отображаться список игроков по странам, ограниченный 4 для наций. Игроки за столом

ID   surn.. nation
1    Garcia   spa
2    smith    gbr
3    rossi    ita
4    villa    spa
5    renoir   fra
6    muller   ger
7    conti    ita
8    johnson  usa
9    james    gbr
10   lopez    spa
11   dubois   fra
12   petit    fra
13   popov    rus
14  rodriguez spa
15   weber    ger
16   ivanov   rus
17  gonzales  spa
18   wagner   ger
19   bruni    ita
20   Smirnov  rus
21   white    gbr
22   schmidt  ger
23  Armstrong usa
24    green   gbr
25   Schulz   ger 

Результат

Nation| surname-
Spa |Garcia-
Spa| villa-
Spa| lopez-
Spa |rodriguez-
Gbr |smith-
Gbr |james-
Gbr| white-
Gbr| green -
Ita| rossi-
Ita |conti-
Ita |bruni-
Fra |renoir-
Fra| dubois-
Fra| petit-
Ger |muller-
Ger| weber-
Ger| wagner-
Ger |schmidt-
Usa |johnson -
Usa |armstrong-
Rus| popov-
Rus |ivanov-
Rus |Smirnov -

1 Ответ

0 голосов
/ 05 апреля 2020

С row_number() оконной функцией:

select t.nation, t.surname
from (
  select *,
    row_number() over (partition by nation order by id) rn
  from players
) t
where t.rn <= 4
order by t.nation, t.id

См. Демоверсию . Или, если ваша версия SQLite не поддерживает оконные функции:

select t.nation, t.surname
from (
  select p.*,
    (select count(*) + 1 from players where nation = p.nation and id < p.id) rn
  from players p
) t
where t.rn <= 4
order by t.nation, t.id

См. demo . Результаты:

| nation | surname   |
| ------ | --------- |
| fra    | renoir    |
| fra    | dubois    |
| fra    | petit     |
| gbr    | smith     |
| gbr    | james     |
| gbr    | white     |
| gbr    | green     |
| ger    | muller    |
| ger    | weber     |
| ger    | wagner    |
| ger    | schmidt   |
| ita    | rossi     |
| ita    | conti     |
| ita    | bruni     |
| rus    | popov     |
| rus    | ivanov    |
| rus    | Smirnov   |
| spa    | Garcia    |
| spa    | villa     |
| spa    | lopez     |
| spa    | rodriguez |
| usa    | johnson   |
| usa    | Armstrong |
...