如何计算市场占有率百分比?求解Maruti2017年12月市占率的SQL写法
原有SQL错误点
- 未限定统计时间范围,统计了所有月份的数据,不符合「2017年12月」的需求
- 误用
COUNT(*)统计维度:COUNT(*)统计的是匹配的记录条数,市场占有率需要用销量数值units_sold的总和计算 - 子查询逻辑错误:子查询
SELECT units_sold FROM Test group by carmaker会返回多行车企销量数据,无法直接作为占有率计算的分母,分母应为2017年12月所有车企的总销量之和 - 未考虑整数除法问题:数据库中整数相除默认返回整数,会丢失小数精度,需要通过乘以100.0这类操作转换为浮点运算
正确SQL实现
仅查询Maruti的2017年12月市场占有率
SELECT 'Maruti' AS carmaker, ROUND( (SUM(CASE WHEN carmaker = 'Maruti' THEN units_sold ELSE 0 END) * 100.0) / SUM(units_sold), 2 ) AS sharepercent FROM Test WHERE month = 'Dec-2017';
查询2017年12月所有车企的市场占有率(可选)
SELECT carmaker, ROUND( (SUM(units_sold) * 100.0) / (SELECT SUM(units_sold) FROM Test WHERE month = 'Dec-2017'), 2 ) AS sharepercent FROM Test WHERE month = 'Dec-2017' GROUP BY carmaker;
计算结果验证
2017年12月全市场总销量 = 198023(Maruti)+140897(Hyundai)+76542(Honda)+21734(Renault)+67521(Tata)= 504717
Maruti市场占有率 = 198023 / 504717 * 100 ≈ 39.23%
内容的提问来源于stack exchange,提问作者ROHIT DUBEY
相关产品推荐
相关产品推荐

