我有一张表,上面有下列数据
| id | type | ------------- | 1 | a | | 1 | b | | 1 | a | | 2 | a | | 2 | b | | 3 | a |
我想知道每种类型的id有多少次出现
| id | a | b | | 1 | 2 | 1 | | 2 | 1 | 1 | | 3 | 1 | 0 |
sql中有没有一种方法(类似于透视表)
62o28rlo1#
我建议使用条件聚合。这是一个跨数据库的解决方案,比特定于供应商的解决方案更灵活(至少同样高效):
select id, sum(case when type = 'a' then 1 else 0 end) a, sum(case when type = 'b' then 1 else 0 end) b from mytable group by id
dfty9e192#
在mssqlserver上,您可以使用以下内容(示例数据由 values() 构造函数)(我不知道其他sql风格):
values()
select * from ( select id, t from ( values (1, 'a'), (1, 'b'), (1, 'a'), (2, 'a'), (2, 'b'), (3, 'a') ) z(id, t) ) x pivot(count(t) for t in (a, b)) as y
2条答案
按热度按时间62o28rlo1#
我建议使用条件聚合。这是一个跨数据库的解决方案,比特定于供应商的解决方案更灵活(至少同样高效):
dfty9e192#
在mssqlserver上,您可以使用以下内容(示例数据由
values()
构造函数)(我不知道其他sql风格):