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

How to change the value of sum function inside the query?

我有一个带有求和聚合函数的查询:

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

这可以吗?或者还有其他方法吗?

试试这个:

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

解释:

内查询select记录总数和记录总和。然后,如果这些计数和总和相等,则意味着所有值都是 1。

注意事项: 删除了检查 when result=2 then 0 因为对于除 1 以外的任何值,查询都会 select 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.

我想你想要这样的东西:

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

所以我正在做的是检查 final-result-must-be-0 条件 MAX()。这样,如果 任何 行满足此条件(即 result = 2),则最大值将为 1。然后我可以使用该值来确定我是想要 return 0 还是 SUM().