Oracle如何通过单条SQL按规则统计各位置各请求的部署状态
Oracle 单SQL实现部署状态聚合判定
完全可以通过单条SQL完成需求,不需要自连接,直接用分组聚合+条件分支判断即可匹配你定义的状态规则,写法简洁且执行效率更高。
核心判定逻辑
按req_id和location_id分组后,按优先级做三层判断即可:
- 同组只要存在任意一条
status = 'failed'的记录,整体状态直接判定为failed - 无failed记录的前提下,组内所有记录
status均为complete时,整体状态判定为complete - 不满足以上两种条件的场景(比如存在部署中、待触发等中间状态,无失败但也没全完成),整体状态判定为
retry
可直接执行的SQL代码
SELECT req_id, location_id, CASE WHEN COUNT(CASE WHEN status = 'failed' THEN 1 END) > 0 THEN 'failed' WHEN COUNT(CASE WHEN status = 'complete' THEN 1 END) = COUNT(*) THEN 'complete' ELSE 'retry' END AS overall_status FROM deployment_status GROUP BY req_id, location_id;
语法说明
- Oracle支持在聚合函数内嵌套条件表达式,
COUNT(CASE WHEN 匹配条件 THEN 1 END)只会统计符合条件的记录数,不符合条件的记录会被计为null,不会被count统计 - 第一条判断优先级最高,只要组内有失败记录就直接返回failed,符合规则要求
- 第二条判断通过对比「complete状态的记录数」和「组内总记录数」,判断是否所有应用都部署完成
- 其余所有场景统一走else分支返回retry,覆盖所有中间状态场景
内容的提问来源于stack exchange,提问作者Zeister
相关产品推荐
相关产品推荐

