Как найти среднее количество телефонных звонков по району за определенный месяц в SQL-запросе
Привет, мне нужна помощь в отображении запроса sql
Поэтому я хотел отобразить среднее общее количество звонков, сделанных по району в конкретный месяц, например, январь 2015, январь 2016, январь 2017 и т. Д.
Ниже приведен образец базы данных
id created_on district_name
11 January 1, 2014, 12:00 AM azamgarh
24 January 1, 2014, 12:00 AM badaun
7 January 1, 2014, 12:00 AM badgam
1 January 1, 2014, 12:00 AM bagalkot
6 January 1, 2014, 12:00 AM baghpat
18 January 1, 2014, 12:00 AM bahraich
4 January 1, 2014, 12:00 AM balaghat
id - звонки, created_on - дата, District_name - местоположение района
Это мой код по этой проблеме
select
t.district_name as "District",
t.created_on::date as "Date",
COUNT(t.id) AS "Total calls",
AVG(COUNT(t.id)) OVER() as "Average"
from t
where
date_part('month', t.created_on::date) = 1
and date_part('year', t.created_on::date) between 2013 and 2018
group by
date_part('year', t.created_on::date)
, date_part('month', t.created_on::date)
, district_name, created_on
этот код показывает только общее среднее количество звонков, которые у меня были с 2010 по 2018 год в январе, а не за конкретный год 2013 -2018.
Может ли кто-нибудь помочь мне с этой проблемой? заранее спасибо
2 ответа
Ты можешь использовать date_part
функция для extract
а также group by
название месяца и год.
select
t.district_name as "District",
t.created_on::date as "Date",
SUM(t.id) / COUNT(t.id) as average
from t
where
date_part('month', t.created_on::date) = 1
and date_part('year', t.created_on::date) <= 2018
group by
date_part('year', t.created_on::date)
, date_part('month', t.created_on::date)
, district_name
Используйте прямое сравнение дат:
SELECT t.district_name as "District",
t.created_on::date as "Date",
SUM(t.id) / COUNT(t.id) as average
FROM t
WHERE created_on >= '2018-01-01' AND
created_on < '2018-02-01'
GROUP BY created_on::date, district_name;
По возможности вы не хотите использовать функции для столбцов в where
пункт. Вот три причины:
- Это предотвращает использование индексов, использующих столбец.
- Это предотвращает использование разделов, использующих столбец.
- Это мешает оптимизатору, поскольку ограничивает использование табличной статистики.
Кроме того, вы хотите агрегировать по дате без компонента времени, поэтомуGROUP BY
также был изменен.