【问题标题】:sql frequency tables in the aggregate: values as columns聚合中的 sql 频率表:值作为列
【发布时间】:2018-01-16 09:32:28
【问题描述】:

我有一张这样的桌子:

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 查询中创建它而无需显式地实际枚举所有可能的值?

【问题讨论】:

  • 标记您正在使用哪个 DBMS(SQL Server、MySQL、PostgreSQL 等...)
  • 在 MS SQL-Server 中,您可以使用 PIVOT 运算符

标签: sql aggregate-functions frequency


【解决方案1】:

您可以将 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。这样,我们就可以让它动态化。

【讨论】:

  • 这正是我想要避免的。我没有先验知识,什么是类型的可能值,所以我不能写一个“case”语句。我试图以一种通用的方式找到一种方法,可以应用于任何列。
  • @amit 然后只需提及您的 rdbms
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多