首页 > 试题广场 >

开发者需要找出所有订单金额高于平均值的用户。以下查询中,哪个

[单选题]
开发者需要找出所有订单金额高于平均值的用户。以下查询中,哪个能高效返回正确结果而不导致错误?
  • SELECT user_id FROM orders WHERE amount > AVG(amount)
  • SELECT user_id FROM orders WHERE amount > (SELECT AVG(amount) FROM orders)
  • SELECT user_id FROM orders GROUP BY user_id HAVING AVG(amount) > amount
  • SELECT user_id, AVG(amount) FROM orders GROUP BY user_id HAVING amount > AVG(amount)
- 选项C: 它先按 user_id 分组,然后用 HAVING AVG(amount) > amount 。但分组后 amount 是“单个订单金额”, AVG(amount) 是“该用户的平均订单金额”,逻辑上“用户平均金额 > 单个订单金额”不是题目要的“订单金额 > 所有订单的平均值”,而且语法也不匹配。
发表于 2025-11-18 17:26:33 回复(0)


4. 为什么 D 是错的?(语法与逻辑错误)

错误原因:SELECT user_id, AVG(amount) ... HAVING amount > AVG(amount)

解析:

语法错误:在GROUP BY 查询中,SELECT 列表里如果出现了非聚合列(user_id 是用来分组的,没问题,但如果 amount 没有聚合),通常会报错(除非是 MySQL 的宽松模式且 amount 依赖于 user_id,但这不是标准行为)。

逻辑错误:HAVING amount > AVG(amount) 试图比较“单笔金额”和“该用户的平均金额”,这与题目要求的“高于全表平均值”不符。

发表于 2026-02-05 09:45:57 回复(0)
这个没有歧义吗?是所有订单中金额高于平均值的用户?还是说用户的所有订单都高于平均值的用户呢?
前者只看金额就可以,后者需要看用户的所有订单是否有高于平均值
发表于 2026-04-26 13:33:20 回复(0)
WHERE中无法用聚合函数

发表于 2026-04-02 16:29:08 回复(0)