You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何多个CASE WHEN函数返回相同值?SQL计数查询问题

SQL计数结果一致问题的修复方案

你的查询里所有计数结果完全一致,核心问题出在COUNT函数的使用逻辑,同时存在字段名与需求不匹配的问题:

  1. COUNT函数的特性:它会统计所有非NULL的记录。你的CASE语句不管条件是否满足,都返回1或0(均为非NULL值),所以每个COUNT统计的都是分组后的总行数,结果自然全部相同。
  2. 字段名不匹配:需求明确指定用feedback字段(取值0-5)、iteration字段标识迭代次数,但查询里混用了rate、client_feedback、index,这会导致统计逻辑偏离需求。

修正后的SQL查询

select
  DATE_FORMAT(created_at,'%M') as Month,
  -- 统计所有评分≥1的行数
  SUM(CASE WHEN feedback >= 1 THEN 1 ELSE 0 END) AS total,
  -- 统计评分为1的行数
  SUM(CASE WHEN feedback = 1 THEN 1 ELSE 0 END) AS Rated_1,
  -- 统计评分为1且为任务首次迭代的行数
  SUM(CASE WHEN feedback = 1 AND iteration = 0 THEN 1 ELSE 0 END) AS first_iteration_rated_1
from tablexxx
where created_at between date('2022-04-01') and date('2022-10-01')
GROUP BY Month

另一种等价写法(利用COUNT忽略NULL的特性)

可以让CASE在不满足条件时返回NULL,这样COUNT只会统计满足条件的记录:

select
  DATE_FORMAT(created_at,'%M') as Month,
  COUNT(CASE WHEN feedback >= 1 THEN 1 END) AS total,
  COUNT(CASE WHEN feedback = 1 THEN 1 END) AS Rated_1,
  COUNT(CASE WHEN feedback = 1 AND iteration = 0 THEN 1 END) AS first_iteration_rated_1
from tablexxx
where created_at between date('2022-04-01') and date('2022-10-01')
GROUP BY Month

内容的提问来源于stack exchange,提问作者Michael Meleady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:10:38