我有一个列'小时'我有一个'亲切'列(它可以是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)
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)
| 归档时间: |
|
| 查看次数: |
145350 次 |
| 最近记录: |