我想创建一个计数查询(在Postgres中),该查询根据data.data_name
对data.todb_date
进行计数。
所以我要查询的内容是所有高于WHERE
子句中要求的行。我尝试了Count(data.data_name)
和Count(*)
,但是它们没有用。
我的计划结果如下:
todb_date: 2016-01-01
data.data_name : test1
count: 150
todb_date: 2017-01-01
data.data_name : test1
count: 130
这是我尝试过的查询:
SELECT data.data_name, parentdata.data_id,
data.data_id, parentdata.todb_date,
COUNT (data.data_name)
FROM parentdata, data
WHERE parentdata.data_id = data.data_id
AND parentdata.todb_date > '2016-01-01'
GROUP BY parentdata.data_id, data.data_id, data.data_name, parentdata.todb_date
答案 0 :(得分:1)
就像@Usagi Miyamoto所建议的那样,您应该使用data_trunc()
函数根据一定的时间增量(这里是每年)对结果进行分组:
SELECT d.data_name nam, date_trunc('year',p.todb_date) yr, COUNT(*) cnt
FROM parentdata p
INNER JOIN data d ON p.data_id = d.data_id AND p.todb_date > '2016-01-01'
GROUP BY d.data_name,date_trunc('year',p.todb_date)
ORDER BY nam, yr
如果将'year'
替换为'date'
,则会获得每日计数,请参阅here。