我有下表:
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的结果。
提前致谢。
答案 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`