如何基于给定schema编写SQL查询,筛选职业生涯安打超2000的球员信息
适配SQL Server的查询语句
SELECT p.playerID 球员ID, p.nameFirst 名字, p.nameLast 姓氏, SUM(b.H) 职业生涯总安打数 FROM Players p INNER JOIN Batting b ON p.playerID = b.playerID GROUP BY p.playerID, p.nameFirst, p.nameLast HAVING SUM(b.H) > 2000 ORDER BY 职业生涯总安打数 DESC
逻辑说明
- 通过
INNER JOIN关联球员基础信息表和赛季打击数据表,匹配每个球员的所有赛季打击记录 - 用
GROUP BY按球员唯一ID、姓名分组,对每个球员的所有赛季安打数做求和聚合,计算出生涯总安打数 - 用
HAVING过滤聚合结果,只保留总安打数超过2000的球员。这里不能用WHERE过滤,因为WHERE执行在聚合计算之前,无法识别聚合后的总安打数字段 - 末尾的
ORDER BY是可选配置,用来按总安打数从高到低排序,方便直接查看排名
内容的提问来源于stack exchange,提问作者contodore
相关产品推荐
相关产品推荐

