Postgresql选择列的不同值的计数

时间:2014-12-08 17:23:42

标签: sql postgresql select

我有一个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;

1 个答案:

答案 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