MySQL:与SUM一起使用的IF语句

时间:2012-03-21 12:25:37

标签: mysql

我有下表:

Unique | Common |  Score
1      |   1    |   10  
2      |   1    |   10  
3      |   1    |   10
4      |   1    |   -10

如果我这样做:

SELECT
    SUM(`score`) AS `total`
FROM
    `test`
GROUP BY
    `common`

我得到了总数:

20

这是我所期待的。

我想将负数视为零,并将剩余分数相加得到总数。所以,如果我运行这个:

SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `unique`

我得到了这些总数:

10
10
10
0

这也是我所期待的。

但是,如果我这样做:

SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `common`

我总得到:

20

为什么在执行上一次查询时我会得到20而不是30?唯一的区别是分组。

顺便说一句,从上一个查询中删除superflous Group by子句也会得到20的结果。

提前致谢。

3 个答案:

答案 0 :(得分:3)

试试这个

 SELECT
    SUM(`score`) AS `total`
FROM
 `myTable` WHERE score > 0
GROUP BY
 `common`

答案 1 :(得分:2)

我没有对此进行过测试,但我认为你的IF和SUM方向错误。我认为应该是这样的

SELECT
  SUM( IF(`score`<0, 0,`score`) ) AS `total`
FROM
  `myTable`
GROUP BY
  `common`

答案 2 :(得分:0)

尝试

SELECT
    SUM( IF(`score`<0, 0, score))  AS `total`
FROM
    `myTable`
GROUP BY
    `common`