MySql:是否可以'SUM IF'或'COUNT IF'?


76

我有一个“小时”列,我有一个“种类”列(可以是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字段b =字段a

..我无法回复此邮件...

Answers:


149

您可以使用以下CASE语句:

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

2
使用带有如果你的逻辑SUM(IF(o.id < 500000, 1, 0)) AS imported
Zohaib

81

您想要类似的东西:

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

请注意,您的第二个示例已经结束,但是IF()函数始终采用三个参数,因此必须为COUNT(IF(kind=1,1,NULL))。我喜欢上面显示的SUM()语法,因为它很简洁。


26

您还可以使用SUM + IFSUM + CASE

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

5

最佳答案之间的区别是SUM(case when kind = 1 then 1 else 0 end)SUM(kind=1)

当列中的所有值kind恰好是be时NULL,结果为SUM(case when kind = 1 then 1 else 0 end)is 0,而结果为SUM(kind=1)is 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)
;

查询结果:

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

3

从MYSQL,我解决了这样的问题:

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

希望这会有所帮助:D


1

值得注意的是,您可以通过在整个查询中使用多个字段来建立Gavin Toweys答案,例如

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.