我确信必须有一种相对简单的方法来做到这一点,但它现在正在逃避我。假设我有一个这样的SQL表:
+-----+-----+-----+-----+
| A | B | C | D |
+=====+=====+=====+=====+
| a | b | 3 | 100 | << a,b
+-----+-----+-----+-----+
| a | c | 3 | 60 | << a,c
+-----+-----+-----+-----+
| a | b | 4 | 50 | << a,b
+-----+-----+-----+-----+
| a | b | 5 | 30 | << a,b
+-----+-----+-----+-----+
| d | b | 3 | 35 | << d,b
+-----+-----+-----+-----+
| a | c | 2 | 40 | << a,c
+-----+-----+-----+-----+
现在,我想知道列A和B的每个值组合出现多少次,然后它可以根据单行C列的分组来保存数据列D.所以,在这个例子中,我想要一个像这样的输出:
+-----+-----+-----+-----+-----+
| A | B | C3 | C4 | C5 |
+=====+=====+=====+=====+=====+
| a | b | 100 | 50 | 30 | << a,b
+-----+-----+-----+-----+-----+
| a | c | 60 | 0 | 0 | << a,c
+-----+-----+-----+-----+-----+
| d | b | 35 | 0 | 0 | << d,b
+-----+-----+-----+-----+-----+
确定这个的SQL是什么?我觉得这绝不是一件非常不寻常的事情。
谢谢!
答案 0 :(得分:2)
您可以使用:
SELECT A, B,
sum(if(C=3, D, NULL)) as C3,
sum(if(C=4, D, NULL)) as C4,
sum(if(C=5, D, NULL)) as C5
FROM yourTable
GROUP BY A, B;
答案 1 :(得分:0)
使用GROUP_CONCAT
(参见docs)可以获得类似的结果,它会在D列和C列中为您提供以逗号分隔的值列表,然后按程序提取数据。 / p>