#mysql #sql #window-functions
#mysql #sql #окно-функции
Вопрос:
У меня есть такая таблица
id name city
-------------------------------
1 Ian London
2 John London
3 David New York
4 Sylvia Mumbai
5 Beryl New York
6 Rashan London
Я хотел бы получить данные с нумерацией строк, сгруппированных по городу. Вот так.
name city count
-------------------------------
Ian London 0
John London 1
Rashan London 2
Beryl New York 0
David New York 1
Sylvia Mumbai 0
Я пытался с
ROW_NUMBER() OVER (PARTITION BY City ORDER BY name)-1
Но подсчитывается количество всех возвращенных элементов, где я хотел бы подсчитать количество людей в каждом городе.
Комментарии:
1. Ваш код должен делать то, что вы хотите. Пожалуйста, покажите нам весь ваш запрос.
2.
select name, city, row_number() over (partition by city order by name)-1 from people;
Работает для меня ™3. @Mono . , , я думаю, вы просто хотите
order by city, name
в конце запроса.
Ответ №1:
Ваш код должен делать то, что вы хотите — однако вы упоминаете group by
, что здесь не имеет значения. Запрос должен быть просто:
select name, city, row_number() over(partition by city order by name) - 1 rn
from mytable
Комментарии:
1. Спасибо за вашу помощь, я понял, что допустил опечатку, и это работает.
Ответ №2:
Для получения результатов, которые вы указываете:
select name, city, row_number() over (partition by city, order by name) as count
from t
order by count(*) over (partition by city) desc, -- number of rows in city
city,
name;
Похоже, вам нужны города, упорядоченные по количеству имен в городе.