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)
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) 试图比较“单笔金额”和“该用户的平均金额”,这与题目要求的“高于全表平均值”不符。