SQL入门问题:查询总罚款超150美元的球员编号及总罚款额排错
问题原因
- 你写的WHERE子句中的子查询
(SELECT SUM(AMOUNT) FROM PENALTIES)统计的是全表所有罚款的总金额,固定值为480美元,永远满足>150的判断条件,相当于WHERE条件始终生效,所以查询会返回所有球员的分组聚合结果,没有实现按球员维度筛选总金额的需求。 - SQL的执行顺序中,WHERE子句运行在GROUP BY分组之前,无法对分组后的聚合结果做过滤,分组后聚合结果的筛选需要用
HAVING子句实现。
正确查询代码
SELECT PLAYERNO, SUM(AMOUNT) AS TOTAL_PENALTY FROM PENALTIES GROUP BY PLAYERNO HAVING SUM(AMOUNT) > 150.00;
运行结果
基于你提供的测试数据,查询仅返回总罚款符合要求的27号球员:
| PLAYERNO | TOTAL_PENALTY |
|---|---|
| 27 | 175.00 |
内容的提问来源于stack exchange,提问作者Therone Jhoseff Almadin
相关产品推荐
相关产品推荐

