一行中有多个计数的表

时间:2014-02-11 16:52:57

标签: mysql

我正在寻找一个解决方案,成为一个漂亮的表,看起来像这样:

ID   | A      | B      | C
-------------------------------
1    | 15     | 4      | 3
2    | 3      | 7      | 1

来源是这样的:

ID  | Type
--------------
1   | A
2   | A
1   | C
1   | C
2   | C
1   | B
2   | A
1   | B

现在我要计算每个ID的所有A-Type和所有B-Type。

有简单的方法吗?

由于

2 个答案:

答案 0 :(得分:6)

这种类型的数据转换称为数据转换。 MySQL没有pivot函数,但你可以使用带有CASE表达式的聚合函数来获得结果:

select id,
  count(case when type = 'A' then 1 end) A,
  count(case when type = 'B' then 1 end) B,
  count(case when type = 'C' then 1 end) C
from yourtable
group by id;

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

假设您的表名为sometable ...

select ID, 
sum(if(Type="A",1,0)) as A,
sum(if(Type="B",1,0)) as B,
sum(if(Type="C",1,0)) as C
from someTable
group by ID

应该做的伎俩。