SQL查询如何新增Approved Count列统计已审批订单数量
SQL实现新增已审批订单计数列的最优方案
直接使用ANSI SQL标准的CASE条件表达式即可实现需求,不需要复杂的关联查询、子查询或者窗口函数,是当前场景下性能最高、兼容性最好的方案。
核心实现代码
假设存储订单统计数据的原始表名为order_stats,查询语句如下:
SELECT `User name`, Status, Count, CASE WHEN Status = 'Approved' THEN Count ELSE NULL END AS `Approved Count` FROM order_stats;
执行逻辑说明
- 查询时逐行判断当前记录的
Status字段值 - 当行状态为
Approved时,新增的Approved Count列直接取本行已有的Count字段值 - 当行状态为
Rejected时,该列返回NULL,所有SQL客户端、数据导出工具对NULL值的默认展示效果即为空单元格,完全匹配“留空”的需求
方案优势
- 性能最优:仅需一次全表扫描,行级条件判断的计算开销可以忽略,执行效率远高于子查询、多表关联、窗口函数类的实现方案
- 兼容性拉满:属于ANSI SQL标准语法,支持MySQL、PostgreSQL、SQL Server、Oracle等所有主流数据库,不存在方言、版本兼容问题
- 可维护性强:字段赋值逻辑直接写在SELECT子句中,无隐含逻辑,后续如果需要调整规则(比如新增其他状态的赋值逻辑),直接修改CASE分支即可
补充说明:如果业务中存在除Approved、Rejected之外的其他订单状态,当前写法会默认将所有非Approved状态的对应列置空;如果需要严格限定仅Rejected状态留空、其他状态单独处理,只需要调整CASE语句的判断条件即可。
内容的提问来源于stack exchange,提问作者user3868197
相关产品推荐
相关产品推荐

