我有一个postgresql
数据库,其结构如下:ID, Date, Name,Classification
。分类是外键值。它有3个可能的值(比如说C1,C2,C3),Name是一个随机字符串。
我想通过计算特定日期间隔的每个区域的出现次数来进行查询。我想用一个例子说清楚。
假设我的表格数据如下:
ID CreateDate Name Classification
------+-------------+------------+--------------
1 2014-01-01 abc C1
2 2012-01-05 def C2
3 2014-01-01 gef C2
4 2012-01-01 hjk C1
5 2014-01-01 lmn C1
6 2013-06-01 opr C3
7 2014-01-01 xyz C1
8 2013-07-01 www C3
我想计算每年的分类数量。我的例子中的结果集是
2012 1 1 0
2013 0 0 2
2014 3 1 0
日期之后的数字是相应的每年c1,c2,c3的出现次数。
希望我很清楚。
编辑: 我可以使用以下查询设计使用年度数据计算特定分类。但事后我被困了。
SELECT COUNT() ,CLASSIFICATION
,select count(), classification
,extract (year from date_trunc( 'year', CREATEDATE )) as year
from TABLE_NAME
group by extract ( year from date_trunc( 'year', CREATEDATE )), CLASSIFICATION
order by year;
答案 0 :(得分:5)
此过程称为条件聚合。我们只是评估特定条件,当满足时返回1,否则使用聚合来对它们求和。这允许我们在获得所需总数的同时转动数据。
SELECT extract(year from date t.createdate) as mYear,
sum(case when t.classification = 'C1' then 1 else 0 end) as c1Sum,
sum(case when t.classification = 'C2' then 1 else 0 end) as c2Sum,
sum(case when t.classification = 'C3' then 1 else 0 end) as c3Sum
FROM Table T
GROUP BY mYear