Я пытаюсь получить город с наибольшим количеством заказов каждый день.Я немного озадачен тем, как работают функции агрегации, когда столбцы имеют несколько групп.
Предположим, есть таблица Поездки со столбцами:
* идентификатор заказа (уникальный)
* город
* дата
Данные похожи на вопрос в leetcode sample
Я хочу найти город с наибольшим количеством заказов каждыйдень.
select
date,
city,
count(*) as city_cnt
from trips a
group by date, city
having count(*) = (select max(count(*))
from trips b
where b.date = a.date
group by b.city)
Этот код может получить ожидаемый результат, но я думаю, что может быть лучшее решение.
Задача 1 : Любой другой способ получить результат?
Проблема 2 : Сначала я попытался использовать max (count (*)) в первом предложении «SELECT» без предложения «HAVING».Есть ошибка «не групповая функция для одной группы»:
select
date,
city,
max(count(*)) as max_city_cnt
from trips a
group by date, city
Я думал, count (*) может рассчитать ежедневный номер заказа каждого города, с помощью функции max () я мог бы получить самый большой номер заказакаждого дня.Но это не работает.Может ли кто-нибудь объяснить это?
Проблема 3 : Мне также не очень ясно, как соотносятся «разбиение по» в оконной функции и «группировка по» ;
select
date,
city,
count(id) city_cnt,
rank() over (partition by date order by count(id) desc) d_rank
from trips
group by date, city
;
Для кода в оконной функции :
rank() over (partition by date order by count(id) desc) d_rank
- Рассчитывается ли количество (id) в соответствии с условием "GROUP BY"?
- Рейтинг () зависит только от чисел в каждый день?-> Чтобы получить звание ежедневного номера заказа каждого города в данный день.
Заранее спасибо!