求SQL查询语句:筛选未下单注册用户与多次下单用户
解决方法
你的原SQL存在几个问题:
- SELECT语句末尾多了逗号,属于语法错误
- ON条件里的
customer.id是无效字段,应该关联Users.user_id和Orders.customer_id - 使用内连接(JOIN)会自动排除没有订单的用户,无法覆盖你需要的第一类用户
下面提供两种可行的查询方案:
方案一:用UNION合并两类用户结果
-- 已注册但未下单的用户 SELECT u.user_id FROM Users u LEFT JOIN Orders o ON u.user_id = o.customer_id WHERE o.customer_id IS NULL UNION -- 下单次数超过1次的用户 SELECT o.customer_id AS user_id FROM Orders o GROUP BY o.customer_id HAVING COUNT(o.orders_id) > 1;
方案二:通过聚合函数一次性筛选
SELECT u.user_id FROM Users u LEFT JOIN Orders o ON u.user_id = o.customer_id GROUP BY u.user_id HAVING COUNT(o.orders_id) = 0 OR COUNT(o.orders_id) > 1;
说明
- 方案一用UNION分别查询两类用户再合并,逻辑清晰,适合需要分别查看两类数据的场景
- 方案二通过LEFT JOIN关联用户和订单,分组后用HAVING条件筛选订单数为0(未下单)或大于1(多次下单)的用户,效率更高,适合一次性获取所有目标用户
内容的提问来源于stack exchange,提问作者Yasser
相关产品推荐
相关产品推荐

