如何在查询中更改sum函数的值?

时间:2015-02-24 08:17:22

标签: mysql aggregate-functions

我有一个带汇总函数的查询:

SELECT sum(case when result=1 then 1 when result=2 then 0)as final_result From results

我想将此部分when result=2 then 0更改为类似when result=2 then final_result equals zero

的内容

有可能这样做吗?还是有另一种方式呢?

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT CASE WHEN cnt=sum THEN sum ELSE 0 END as Final_result
FROM
(
    SELECT count(*) as cnt,
           SUM(case when result=1 then 1 else 0 end) as sum
     from results
) Temp

工作Fiddle here

<强>解释

内部查询选择记录总数和记录总和。然后,如果那些count和sum相等,则意味着所有值都是1.

NB:删除了检查when result=2 then 0因为,查询将为除1以外的任何值选择0.因此无需检查result=2

修改

要查找10个连续1的计数,您可以执行以下操作:

SELECT SUM(CASE WHEN RN=10 THEN 1 ELSE 0 END) AS final_result
FROM
(
SELECT CASE WHEN result=1 THEN @row_number:=@row_number+1 ELSE @row_number:=0 END AS RN,
       result 
FROM results, (SELECT @row_number:=0) AS t
) Temp

示例Fiddle here

答案 1 :(得分:0)

我想你想要这样的东西:

SELECT case max(case result when 2 then 1 else 0 end)
           when 1 then 0
           else sum(case when result=1 then 1 else 0 end)
       end as final_result
From results

<强> Fiddle here

所以我正在做的是检查MAX()内的 final-result-must-be-0 条件。这样,如果任何行符合此条件(即result = 2),则最大值将为1。然后我可以使用该值来确定是否要返回0或执行SUM()