MySQL按agent_id分组统计销售数据:呼叫数、转化率等查询实现
解决销售报表SQL查询问题
嘿,我来帮你搞定这个卡住的SQL查询!你已经有了不错的开头,只需要用条件聚合来实现剩下的列,同时还要修正一个小笔误(你的WHERE子句里用了comm_ts,但表结构里是date字段哦)。
完整的SQL查询语句
SELECT agent_id, COUNT(*) AS `Number of Calls`, COUNT(CASE WHEN type = 'sales' AND result = 'yes' THEN 1 END) AS `保存数`, SUM(CASE WHEN type = 'sales' AND result = 'yes' THEN value ELSE 0 END) AS `保存值总和`, CONCAT(ROUND((COUNT(CASE WHEN type = 'sales' AND result = 'yes' THEN 1 END) / COUNT(*)) * 100, 0), '%') AS `转化率` FROM sales WHERE date > '2018-04-29' GROUP BY agent_id;
关键部分解释
让我拆解开每个新增列的逻辑:
- 保存数:用
CASE语句筛选出type='sales'且result='yes'的记录,符合条件返回1,否则返回NULL;COUNT()会自动忽略NULL值,所以得到的就是符合条件的记录总数。 - 保存值总和:同样用
CASE判断,符合条件时取value的值,否则取0;SUM()会把这些值加起来,得到目标总和。 - 转化率:先计算
保存数/呼叫数的比值,乘以100后用ROUND()取整,最后用CONCAT()拼接百分号%,得到你要的百分比格式。
验证结果
执行这个查询后,会得到和你预期完全一致的结果:
+----------+----------------+--------+--------------+--------+ | agent_id | Number of Calls | 保存数 | 保存值总和 | 转化率 | +----------+----------------+--------+--------------+--------+ | 1 | 5 | 2 | 17.79 | 40% | | 2 | 3 | 1 | 11.11 | 33% | | 3 | 4 | 1 | 1.41 | 25% | +----------+----------------+--------+--------------+--------+
内容的提问来源于stack exchange,提问作者MalcolmInTheCenter
相关产品推荐
相关产品推荐

