如何筛选平均奖杯数超过20的国家?SQL查询优化需求
解决方法
关键修改逻辑
你的现有SQL已经完成了数据合并、关联和分组计算,但缺少聚合后的筛选步骤。要只保留平均奖杯数超过20的国家,必须用HAVING子句对分组后的结果过滤;如果明确只需要Italy和Spain,也可以结合WHERE提前限定国家范围(但更推荐用HAVING保证逻辑严谨,避免硬编码国家但实际平均不达标的情况)。
修改后的完整SQL
SELECT c.country, AVG(t.trophy) AS avg_trophy FROM ( -- 合并两个俱乐部表的国家与俱乐部数据 SELECT country, club FROM Tbl_Club1 UNION ALL SELECT country, club FROM Tbl_Club2 ) AS c JOIN Tbl_Trophy t ON c.club = t.club -- 可选:提前限定国家范围,缩小查询数据量 -- WHERE c.country IN ('Italy', 'Spain') GROUP BY c.country -- 核心:过滤平均奖杯数大于20的分组 HAVING AVG(t.trophy) > 20;
补充说明
WHERE是在分组前过滤行数据,HAVING是分组后过滤聚合结果,这里必须用HAVING来筛选平均奖杯数的条件。- 如果业务上已经确认只有Italy和Spain满足平均>20的要求,加上
WHERE c.country IN ('Italy', 'Spain')可以减少关联计算的数据量,提升查询速度。
内容的提问来源于stack exchange,提问作者noixido
相关产品推荐
相关产品推荐

