SQL查询逻辑验证:筛选最大酒店折扣超平均折扣最大值的用户
你的SQL高层逻辑分析
任务条件1的处理完全正确:
你通过WHERE cancellation = FALSE AND hotel_discount_amount IS NOT NULL精准筛选出未取消且带有酒店折扣的行程,再按user_id分组后用HAVING COUNT(trip_id) >= 2确保用户拥有至少2次符合要求的行程,同时计算每个合格用户的最大酒店折扣,这部分完全匹配任务第一个条件。任务条件2的逻辑匹配取决于需求表述准确性:
你的查询逻辑是找出最大酒店折扣大于所有符合条件用户的最大折扣平均值的用户。但你写的任务条件2是“该用户的最大酒店折扣严格大于所有符合条件用户的平均酒店折扣的最大值”——这里存在歧义:- 如果是任务表述笔误,实际需求是前者(大于所有用户最大折扣的平均值),那你的高层逻辑完全正确;
- 如果需求确实是后者(大于所有用户的平均折扣的最大值),那逻辑就不匹配了:后者需要先计算每个用户的平均酒店折扣,再取这些平均值的最大值,最后筛选用户的最大折扣大于该值。
额外细节验证点:
- 确认
trip_id是否为非空字段,如果trip_id可能为NULL,COUNT(trip_id)会漏统计行程,建议改用COUNT(*); - 确认
cancellation字段的取值规则,比如是否用0/1而非布尔值表示取消状态,避免筛选条件失效。
- 确认
内容的提问来源于stack exchange,提问作者Andrei Andreev
相关产品推荐
相关产品推荐

