如何修改SQL查询以筛选巴基斯坦主场最高得分赛事
解决巴基斯坦主场最高得分赛事筛选问题
你的问题核心是主查询仅限定了主场得分等于巴基斯坦的最高主场得分,但未同时约束主队为巴基斯坦,因此会返回所有主场得分为该数值的赛事(包含其他国家的记录)。以下是两种可行的修改方案:
方案一:主查询添加主队筛选条件
直接在主查询的WHERE子句中同时指定home_team = "Pakistan",确保仅返回巴基斯坦主场且得分是其最高值的赛事:
SELECT date, home_team, away_team, home_score, away_score FROM `my-practice-project-394200.football_results.scores` WHERE home_team = "Pakistan" AND home_score = (SELECT MAX(home_score) FROM `my-practice-project-394200.football_results.scores` WHERE home_team = "Pakistan")
方案二:使用窗口函数(推荐)
如果巴基斯坦主场存在多场赛事得分同为最高值的情况,窗口函数可以更优雅地保留所有符合条件的记录,同时避免重复子查询:
WITH ranked_matches AS ( SELECT date, home_team, away_team, home_score, away_score, RANK() OVER (PARTITION BY home_team ORDER BY home_score DESC) AS score_rank FROM `my-practice-project-394200.football_results.scores` WHERE home_team = "Pakistan" ) SELECT date, home_team, away_team, home_score, away_score FROM ranked_matches WHERE score_rank = 1
若仅需返回一条结果(比如最早/最晚的赛事),可将RANK()替换为ROW_NUMBER(),并在ORDER BY后追加date字段(如ORDER BY home_score DESC, date ASC)。
内容的提问来源于stack exchange,提问作者David Capuano
相关产品推荐
相关产品推荐

