嗨,我需要显示sql查询的帮助
所以我想显示特定月份(例如2015年1月,2016年1月,2017年1月等)每个地区的总呼叫总数
下面是示例数据库
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年的特定年份
有人可以帮助我解决这个问题吗?预先谢谢你
答案 0 :(得分:0)
您可以使用email
函数来date_part
和extract
月份名称和年份。
group by
答案 1 :(得分:0)
使用直接日期比较:
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
也已修改。