Как сгруппировать столбец по месяцам и СЧИТАТЬ в месяц?

Я пытаюсь вернуть количество заказов на аренду в каждом магазине, выполненных в месяц. Я хочу показать четыре столбца; месяц, год, идентификатор магазина, COUNT прокатов (в месяц). Я могу вернуть месяц, год и сохранить столбцы идентификаторов, но COUNT аренды не СЧИТАЕТСЯ по месяцам:

SELECT 
DATE_PART('month', r.rental_date) Rental_month, 
DATE_PART('year', r.rental_date) Rental_year, 
s.store_id, 
COUNT(r.rental_date) count_rentals 
FROM store s
JOIN staff staf
ON s.store_id = staf.store_id
JOIN payment pay
ON staf.staff_id = pay.staff_id
JOIN rental r
ON pay.rental_id = r.rental_id
GROUP BY r.rental_date, s.store_id

My output: Мой вывод

My desired output would look like this: желаемый результат

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
109
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно фактически сгруппировать по месяцу и году, а не по полной дате. Измените свою группу GROUP BY на -

GROUP BY  
       DATE_PART('month', r.rental_date),
       DATE_PART('year', r.rental_date),
       s.store_id,

Вместо использования date_part() я бы рекомендовал date_trunc():

SELECT DATE_TRUNC('month', r.rental_date) as yyyymm, 
       st.store_id, 
       COUNT(*) as count_rentals 
FROM staff st JOIN
     payment p
     ON st.staff_id = p.staff_id JOIN
     rental r
     ON p.rental_id = r.rental_id
GROUP BY yyyymm, st.store_id;

Примечания:

  • store не нужен в запросе. store_id хранится в таблице staff.
  • В Postgres вы можете агрегировать по псевдониму столбца.
  • date_trunc() создает столбец даты в первый день месяца.

1x date_drunc() >>> 2x date_part() во всех отношениях.

Erwin Brandstetter 08.04.2019 01:49

Другие вопросы по теме