MySql:可以'SUM IF'还是'COUNT IF'?

rea*_*ebo 59 mysql

我有一个列'小时'我有一个'亲切'列(它可以是1,2或3)

我想做点什么:

SELECT count(id), SUM(hour) as totHour, SUM( IF ( kind = 1, 1, 0 ) ) as countKindOne
Run Code Online (Sandbox Code Playgroud)

要么

SELECT count(id), SUM(hour) as totHour, COUNT( IF ( kind = 1 ) ) as countKindOne
Run Code Online (Sandbox Code Playgroud)

但是mysql告诉我,我有一个错误......错误是什么!?

请参阅此stackoverflow主题:MySQL SUM IF字段b =字段a

..我无法回复此...

Tar*_*ryn 123

你可以使用一个CASE声明:

SELECT count(id), 
    SUM(hour) as totHour, 
    SUM(case when kind = 1 then 1 else 0 end) as countKindOne
Run Code Online (Sandbox Code Playgroud)

  • 使用您的逻辑 If `SUM(IF(o.id < 500000, 1, 0)) AS returned` (7认同)

Gav*_*wey 74

你想要的东西:

SELECT count(id), SUM(hour) as totHour, SUM(kind=1) as countKindOne;
Run Code Online (Sandbox Code Playgroud)

请注意,您的第二个示例是关闭的,但IF()函数总是需要三个参数,所以它必须是COUNT(IF(kind=1,1,NULL)).我更喜欢上面显示的SUM()语法,因为它简洁.


Onu*_*rım 18

您还可以使用SUM + IF短于SUM + CASE:

SELECT
    count(id)
    , SUM(IF(kind=1, 1, 0)) AS countKindOne
    , SUM(CASE WHEN kind=2 THEN 1 ELSE 0 END) AS countKindTwo
Run Code Online (Sandbox Code Playgroud)


小智 8

最高答案之间略有不同,即SUM(case when kind = 1 then 1 else 0 end)SUM(kind=1)

当列中的所有值kind恰好为 时NULL,结果SUM(case when kind = 1 then 1 else 0 end)0,而结果SUM(kind=1)NULL

一个例子(http://sqlfiddle.com/#!9/b23807/2):

架构:

CREATE TABLE Table1
(`first_col` int, `second_col` int)
;

INSERT INTO Table1
    (`first_col`, `second_col`)
VALUES
       (1, NULL),
       (1, NULL),
       (NULL, NULL)
;
Run Code Online (Sandbox Code Playgroud)

查询结果:

SELECT SUM(first_col=1) FROM Table1;
-- Result: 2
SELECT SUM(first_col=2) FROM Table1;
-- Result: 0
SELECT SUM(second_col=1) FROM Table1;
-- Result: NULL
SELECT SUM(CASE WHEN second_col=1 THEN 1 ELSE 0 END) FROM Table1;
-- Result: 0
Run Code Online (Sandbox Code Playgroud)