SQL查询求助:如何正确获取用户转化及消费相关数据?
修正你的SQL查询错误
先梳理原代码存在的几个问题:
- CASE语句语法错误:缺少ELSE的返回值,未用END闭合CASE,且
AS converted的位置错误,应放在CASE语句末尾 - JOIN关联条件错误:
users.id = users.id是无效的自关联,需关联users表和activity表的用户ID字段(假设activity表的关联字段为user_id) - 未对
total_spent做聚合操作:使用GROUP BY后,非分组字段需用聚合函数处理,否则会触发语法错误 - COALESCE使用位置错误:应包裹聚合后的总消费值,确保无消费记录的用户显示0
修正后的代码:
SELECT users.id AS user_id, country, gender, device_type, test_group, CASE WHEN SUM(activity.total_spent) > 0 THEN 1 ELSE 0 END AS converted, COALESCE(SUM(activity.total_spent), 0) AS total_spent FROM users LEFT JOIN activity ON users.id = activity.user_id GROUP BY users.id, country, gender, device_type, test_group;
关键说明:
- 用
users.id = activity.user_id建立有效关联,确保用户数据和消费数据匹配 - 用SUM函数计算每个用户的总消费,符合GROUP BY的语法要求
- 修正CASE语句结构,补全ELSE返回值0,正确设置字段别名
- 通过COALESCE将无消费记录的NULL值转为0,满足总消费金额$0及以上的需求
内容的提问来源于stack exchange,提问作者OLUCHI
相关产品推荐
相关产品推荐

