MySql: 有没有可能是“ SUM IF”或者“ COUNT IF”?

我有一个专栏“小时” 我有一个列“ kind”(可以是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 告诉我,我有一个错误... 什么是错误! ?

请参阅这个堆栈溢出主题: MySQL SUM IF field b = field a

我无法回答这个问题。

258443 次浏览

你想要这样的东西:

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

注意,第二个示例很接近,但 IF ()函数 一直都是有三个参数,因此它必须是 COUNT(IF(kind=1,1,NULL))。我更喜欢上面显示的 SUM ()语法,因为它简洁明了。

可以使用 CASE语句:

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

你也可以使用比 SUM + CASE短的 SUM + IF:

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

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

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

希望这个对你有帮助: D

There is a slight difference between the top answers, namely SUM(case when kind = 1 then 1 else 0 end) and 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)
;

查询结果:

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

值得注意的是,您可以通过使用查询中的多个字段构建 GavinToweys 答案,例如

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

您也可以对 COUNT使用这种语法,我确信其他函数也是如此。