mysql group by aggregation as column

时间:2016-02-16 23:40:19

标签: mysql group-by sum sign

我有一个包含两个相关字段namevalue的表格。 我想做一个查询,它会给我所有负值的总和以及每个名字的所有正值。

我得到的最好的是以下代码:

SELECT `name`,sign(`value`),sum(`value`)
FROM `testing` 
WHERE `value` != 0 
GROUP BY `name`,sign(`value`)

它给了我这些结果:

name | sign(`value`) | sum(`value`)
-----------------------------------
A    |      -1       |    -9
A    |       1       |    21
B    |      -1       |   -35
B    |       1       |     8
C    |      -1       |   -16
C    |       1       |    21

我想要的结果是什么,但不是我想要的结果。

我能以某种方式让它看起来像这样吗?

name |  -1  |   1
-------------------
A    |  -9  |  21
B    | -35  |   8
C    | -16  |  21

这是我的第一个问题,所以我希望我没有以完全羞辱的方式写出来。

提前致谢。

1 个答案:

答案 0 :(得分:1)

在这种情况下,case语句会派上用场。

select name,
sum(case when value > 0 then value else 0 end) as positive_sum,
sum(case when value < 0 then value else 0 end) as negative_sum
from testing
group by name;