SQL中如何比较同表内user_id对应的多个order_id值并做聚合处理
实现SQL语句
你可以使用分组聚合+条件判断的逻辑实现,兼容MySQL、PostgreSQL、SQL Server等绝大多数主流数据库:
SELECT user_id, CASE WHEN COUNT(DISTINCT order_id) > 1 THEN '00000' ELSE MAX(order_id) END AS order_id FROM Orders GROUP BY user_id;
逻辑说明
- 按照
user_id分组,保证每个用户最终仅返回1条记录,满足去重要求 - 用
COUNT(DISTINCT order_id)统计每个用户对应的唯一订单号数量:- 数量大于1时,直接返回预设默认值
'00000' - 数量等于1时,
MAX(order_id)会取出唯一的订单号(此处替换为MIN(order_id)效果完全一致)
- 数量大于1时,直接返回预设默认值
上述语句执行结果和你给出的期望输出完全匹配。
内容的提问来源于stack exchange,提问作者SNS
相关产品推荐
相关产品推荐

