Mysql 一行中有多个计数的表
我正在寻找一种解决方案,使之成为一张漂亮的桌子,如下所示:Mysql 一行中有多个计数的表,mysql,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
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 | 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型和所有B型
有简单的方法吗
谢谢假设您的表名为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
应该可以做到这一点。这种类型的数据转换称为枢轴。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;
请参见如果您有表示层/应用程序级代码,请考虑处理数据显示问题(例如,作用于有序数组的简单PHP循环)。还要注意的是,在关系数据库中,表需要有主键。这个问题似乎是离题的,因为它缺少最少的工作。通过使用您尝试过的代码和遇到困难的地方更新您的问题来改进您的问题。好的,很抱歉。我不知道该怎么开始,为什么会被否决?我不知道为什么会被否决,但我们都有一个。此语法是正确的,并且是特定于MySQL的。