我有一个带汇总函数的查询:
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
有可能这样做吗?还是有另一种方式呢?
答案 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()
。