使用Over Partition By计算门店苹果订单占比结果错误如何解决
SQL计算门店苹果订单占比优化方案
原写法存在的问题
- 语法不完整:
count(distinct case...)缺失右括号,运行会直接报错 - 逻辑不符预期:未按门店分组聚合,直接使用窗口函数会返回和原数据行数相同的重复结果,无法得到每个门店一行的汇总输出
- 精度丢失风险:大部分数据库中整数相除默认做截断处理,例如2/3会直接返回0,不会计算小数结果
- 特殊字段未处理:
order no字段包含空格,未用反引号包裹会触发语法错误
正确实现代码
SELECT store, CONCAT( ROUND( COUNT(DISTINCT CASE WHEN product = 'apple' THEN `order no` END) * 100.0 / COUNT(DISTINCT `order no`), 0) , '%') AS product FROM 你的表名 GROUP BY store ORDER BY product DESC;
逻辑说明
- 先按
store字段分组,确保每个门店仅返回一行统计结果 - 分子计算对应门店product为apple的唯一订单号数量,分母计算对应门店全部唯一订单号数量
- 分子提前乘以
100.0将整数转为浮点型,规避整数除法截断问题 - 用
ROUND函数保留0位小数,和示例输出精度匹配 - 用
CONCAT拼接百分号,直接得到符合要求的百分比格式 - 按百分比降序排序,输出顺序和示例完全一致
内容的提问来源于stack exchange,提问作者tlqn
相关产品推荐
相关产品推荐

