SQL Query如何计算单行中的不同值

时间:2011-02-22 08:50:28

标签: sql mysql

我确信必须有一种相对简单的方法来做到这一点,但它现在正在逃避我。假设我有一个这样的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是什么?我觉得这绝不是一件非常不寻常的事情。

谢谢!

2 个答案:

答案 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>

相关问题