为何SQL查询未返回各组真实转化率,反而均显示100%?
问题原因排查与修正
核心问题:关联逻辑错误
你的查询中,LEFT JOIN "groups" ON activity.uid = groups.uid这一步错误地将分组表与活动表关联,而非用户表。这会导致:
- 只有存在活动记录(即已转化)的用户才会被匹配到分组中
COUNT(DISTINCT id)统计的是每组中有活动记录的用户数,而非该组的总用户数- 分子
COUNT(DISTINCT activity.uid)和分母统计的是同一批用户,因此转化率必然为100%
修正后的SQL
SELECT groups.group, COUNT(DISTINCT users.id) AS total_users, COUNT(DISTINCT activity.uid) AS total_converted, (COUNT(DISTINCT activity.uid)*1.0 / COUNT(DISTINCT users.id)::float * 100) AS conversion_rate FROM users LEFT JOIN "groups" ON users.id = groups.uid -- 修正:用户表直接关联分组表 LEFT JOIN activity ON users.id = activity.uid GROUP BY groups.group;
关键修正点
- 将分组表与用户表直接关联,确保统计每组的全部用户作为计算转化率的分母
- 保持用户表与活动表的左连接,保留没有活动记录的用户,准确统计各组的实际转化人数
内容的提问来源于stack exchange,提问作者William Brooker
相关产品推荐
相关产品推荐

