按user_id统计订单总数、取消单量及二者比值的SQL实现问题
SQL查询修正方案
现有代码问题
- 取消订单统计条件错误:将已送达状态判定为取消,与实际需求相反
- 未返回分组字段
user_id,输出缺少用户ID列 - 表名、列名配置错误:目标统计表为
orders_table,且表内字段均带_column后缀,与现有代码中的字段名不匹配 - 缺少取消订单占比的计算逻辑
修正后可运行代码
SELECT user_id_column AS user_id, COUNT(orders_id_column) AS total_orders, SUM(IF(final_status_column = 'CanceledStatus', 1, 0)) AS canceled_orders, ROUND( CAST(SUM(IF(final_status_column = 'CanceledStatus', 1, 0)) AS DECIMAL) / NULLIF(COUNT(orders_id_column), 0), 2 ) AS cocient FROM orders_table GROUP BY user_id_column;
代码说明
- 字段名完全匹配给定的
orders_table结构,避免不存在报错 - 用
NULLIF(COUNT(orders_id_column), 0)处理无订单场景下的除以零异常 - 通过
CAST将整数转换为小数类型,避免整数除法直接取整的问题 - 用
ROUND函数保留两位小数,输出格式与需求完全一致
内容的提问来源于stack exchange,提问作者Bram
相关产品推荐
相关产品推荐

