You need to enable JavaScript to run this app. Oracle如何将多条SELECT查询转为CASE语句实现多状态计数
优惠活动
大模型
产品
解决方案
定价
更多

Oracle如何将多条SELECT查询转为CASE语句实现多状态计数

错误原因分析
  • 语法错误1:CASE表达式的THEN后嵌套了返回多列的子查询,SUM()函数仅支持对单列数值聚合,无法处理多列结果,同时子查询内直接用and开头写过滤条件,缺失WHERE关键字,直接触发括号匹配报错
  • 逻辑错误2:不需要在CASE内重复嵌套PERSON表查询,外层已经对PERSON表做扫描,直接在当前行做状态判断即可
  • 效率问题:三个统计的公共过滤条件updated_on > sysdate - 30没有提前过滤,会扫描大量无效数据
正确写法
SELECT
  SUM(CASE WHEN person_status_id IN (3,4,6) THEN 1 ELSE 0 END) AS Completed,
  SUM(CASE WHEN person_status_id IN (5,7,13) THEN 1 ELSE 0 END) AS Pending,
  SUM(CASE WHEN person_status_id IN (8) THEN 1 ELSE 0 END) AS Started
FROM PERSON w
WHERE w.updated_on > sysdate - 30;

上述代码会先过滤出最近30天更新的记录,再按状态分组计数,执行效率远高于多子查询关联的写法,结果和你原有实现完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:39:03