2012-10-25 75 views
30

我有一列“小时” 我有一列“那种”(也可以是1,2或3)MySql:是否可以'SUM IF'或'COUNT IF'?

我想这样做:

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

..我不能回答这个...

回答

66

您可以使用CASE声明:

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

你想要的东西,如:

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

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

+0

我投了SUM(kind = 1)。简洁,清晰,直观.... – Delmo

+0

非常有用的+1从我,,,,谢谢 –

+0

SUM(kind = 1)非常简单。从我的+1 – vhen

9

您还可以使用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 
+0

在kind = 2 – DarkSide

+0

编辑后,CASE中不需要逗号。谢谢。 –

0

从MySQL我解决了这样的问题:

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

希望这会有帮助:D