如何更改查询中 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
所以我正在做的是检查 final-result-must-be-0 条件 MAX()
。这样,如果 任何 行满足此条件(即 result = 2
),则最大值将为 1
。然后我可以使用该值来确定我是想要 return 0
还是 SUM()
.
我有一个带有求和聚合函数的查询:
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
所以我正在做的是检查 final-result-must-be-0 条件 MAX()
。这样,如果 任何 行满足此条件(即 result = 2
),则最大值将为 1
。然后我可以使用该值来确定我是想要 return 0
还是 SUM()
.