Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:IF语句与SUM一起使用_Mysql - Fatal编程技术网

MySQL:IF语句与SUM一起使用

MySQL:IF语句与SUM一起使用,mysql,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` SELECT IF(`score`<0, 0, SUM(`sc

我有下表:

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`
SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `unique`
SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `common`
我得到了总数:

20
这就是我所期望的

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

SELECT
    SUM(`score`) AS `total`
FROM
    `test`
GROUP BY
    `common`
SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `unique`
SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `common`
这也是我所期望的

但是,如果我运行这个:

SELECT
    SUM(`score`) AS `total`
FROM
    `test`
GROUP BY
    `common`
SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `unique`
SELECT
    IF(`score`<0, 0, SUM(`score`)) AS `total`
FROM
    `myTable`
GROUP BY
    `common`
为什么在执行最后一个查询时得到20而不是30?唯一的区别是分组

顺便说一句,从最后一个查询中删除superflous
groupby
子句也会得到20的结果

提前谢谢。

试试这个

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

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

我还没有测试过这个,但我认为你的IF和SUM是错误的。我想应该是这样

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

SUM(如果,`score`我还没有测试过这个,但是我认为你的IF和SUM是错误的。我认为应该是这样的

SELECT
  SUM( IF(`score`<0, 0,`score`) ) AS `total`
FROM
  `myTable`
GROUP BY
  `common`
选择
求和(如果(`score`Try

选择
求和(如果(`score`Try

选择

求和(IF(`score`因为它做的是10+10+10+-10),也就是20。如果你想把负数当作零,你还想在结果集中有<0的行吗?因为它做的是10+10+10+-10),即20。如果要将负数视为零,是否仍希望结果集中的行数小于0?如果记录的分数
此查询将提供正确的结果如果记录的分数