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

时间:2012-10-25 19:07:43

标签: mysql

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

我想做点什么:

SELECT count(id), SUM(hour) as totHour, SUM( IF ( kind = 1, 1, 0 ) ) as countKindOne

SELECT count(id), SUM(hour) as totHour, COUNT( IF ( kind = 1 ) ) as countKindOne

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

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

..我无法回答这个......

6 个答案:

答案 0 :(得分:112)

您可以使用CASE声明:

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

答案 1 :(得分:68)

你想要的东西:

SELECT count(id), SUM(hour) as totHour, SUM(kind=1) as countKindOne;

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

答案 2 :(得分:17)

您还可以使用短于SUM + IF的{​​{1}}:

SUM + CASE

答案 3 :(得分:2)

最前面的答案之间有细微差别,分别为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)的结果为{{1 }}。

示例(http://sqlfiddle.com/#!9/b23807/2):

模式:

NULL

查询结果:

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

INSERT INTO Table1
    (`first_col`, `second_col`)
VALUES
       (1, NULL),
       (1, NULL),
       (NULL, NULL)
;

答案 4 :(得分:0)

从MYSQL我解决了这个问题:

SUM(CASE WHEN used = 1 THEN 1 ELSE 0 END) as amount_one,

希望这会有所帮助:D

答案 5 :(得分:0)

值得注意的是,您可以通过使用整个查询中的多个字段(例如

)来建立Gavin Toweys答案

SUM(table.field = 1 AND table2.field = 2)

您还可以将此语法用于COUNT,并且我相信其他功能也是如此。