聚合中的sql频率表:值作为列

时间:2018-01-16 09:32:29

标签: sql aggregate-functions frequency

我有一张这样的表:

id    type    other_fields
1     a      1232
1     b      12
1     a      4324
2     c      4343
2     b      12
2     a      43545

我想聚合它,以便每行对应一个id 并为每个可能的类型值添加一列,每行包含相应的计数:

id     tyep_a    type_b    type_c
1      2         1         0
2      1         1         1

有没有办法在简单的SQL查询中创建它而无需实际枚举所有可能的值?

1 个答案:

答案 0 :(得分:0)

您可以将 CASE 与汇总功能 SUM 表达一起使用。

<强>查询

select id,
sum(case type when 'a' then 1 else 0 end) as type_a,
sum(case type when 'b' then 1 else 0 end) as type_b,
sum(case type when 'c' then 1 else 0 end) as type_c
from your_table_name
group by id;

无论RDBMS如何,这都可能有效。但是最好提到你正在使用的RDBMS。所以,我们可以让它变得动态。