#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 . . . Вы должны задать пересмотренный вопрос как новый вопрос . Это совсем другое дело.