2012-03-21 3 views
0

Я следующую таблицу:MySQL: IF оператор используется с SUM

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 при выполнении последнего запроса? Единственное различие заключается в группировке.

BTW, удаляя superflous Group by статью из последнего запроса также дает результат 20.

Спасибо заранее.

+0

Потому что он делает 10 + 10 + 10 + (- 10), что 20. –

ответ

3

Попробуйте

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

Я не проверял это, но я думаю, что у вас есть IF и SUM навыворот. Я думаю, что это должно быть так

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

Попробуйте

SELECT 
    SUM(IF(`score`<0, 0, score)) AS `total` 
FROM 
    `myTable` 
GROUP BY 
    `common` 
Смежные вопросы