我有一个专栏'小时' 我有一个列'亲切'(可以是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
..我无法回答这个......
答案 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
,并且我相信其他功能也是如此。