如何SUM结果SUMs SQL?

时间:2017-09-27 19:49:34

标签: mysql sql

使用此查询我尝试对SUM函数的结果求和:

select 
DAY(created_at) AS day, 
SUM(if(status = '1', 1, 0)) AS result, 
SUM(if(status = '2', 1, 0)) AS noresult,
SUM(result + noresult)
from `clients` where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) group by `day`

我尝试在这一行中这样做:

SUM(result + noresult)

3 个答案:

答案 0 :(得分:3)

试试这个:

select 
    DAY(created_at) AS day, 
    SUM(if(status = '1', 1, 0)) AS result, 
    SUM(if(status = '2', 1, 0)) AS noresult,
    SUM(if(status in ('1', '2'), 1, 0)) 
from `clients` 
where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) 
group by `day`

答案 1 :(得分:2)

您不能在选择列名称中使用别名,您必须重复代码

select 
DAY(created_at) AS day, 
SUM(if(status = '1', 1, 0)) AS result, 
SUM(if(status = '2', 1, 0)) AS noresult,
SUM(if(status = '1', 1, 0)) + SUM(if(status = '2', 1, 0)) AS all_result

from `clients` where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) group by `day`

你必须重复代码,因为不同的SQL子句按特定的顺序处理(首先从那时开始然后选择和分组......等等)所以在选择解析时,别名不是可用于sql引擎

答案 2 :(得分:1)

正如其他几个人所说,你不能在你的select语句中使用别名。但是,为了保持清洁,您可以结合两种条件,而不是将SUM两个字段相加。

select 
DAY(created_at) AS day, 
SUM(if(status = '1', 1, 0)) AS result, 
SUM(if(status = '2', 1, 0)) AS noresult,
SUM(if(status = '1' OR status = '2', 1, 0)) AS newcolumn
from `clients` where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) group by `day`