Сгруппируйте элементы по 2 столбцам

#sql #sqlite #group-by

Вопрос:

Допустим, у нас есть таблица Sqlite, содержащая:

 name;city;age;id
Alice;New-York;25;13782749
Eve;Chicago;23;1938679
Bob;New-York;25;824697624
 

Как сгруппировать по h=CONCAT(city,age) :

 h;name;id
group1;Alice;13782749
group1;Bob;824697624
group2;Eve;1938679
 

Вместо group1 , group2 , нормально иметь 1 2 , или даже хэш f68ac46 c3155a0 для каждой группы.

Самое близкое, что я мог получить, это:

 select (city||age) as h, * from mytable order by h;
 

но вместо этого я бы хотел номер группы или хэш, а не отображение city||age (которое в моем реальном случае может быть длинным).

Ответ №1:

Вы можете перечислить группы, используя dense_rank() :

 select dense_rank() over (order by city, age) as grpnum, name, id
from t;
 

Комментарии:

1. Замечательный @GordonLinoff, он работает даже с Sqlite! Я отредактировал вопрос в конце с небольшими изменениями, у вас есть идея для этого?

2. @Basj . . . Вы должны задать пересмотренный вопрос как новый вопрос . Это совсем другое дело.