MySQL多表关联查询:筛选最新赛季并统计球员积分,返回指定字段
MySQL多表关联查询:筛选最新赛季并统计球员积分,返回指定字段
我来帮你搞定这个查询!你需要的是关联所有相关表,同时筛选出最新赛季的数据,还要把赛季ID放到结果里。咱们一步步来调整:
首先,你原来的查询没关联Results表,所以没办法筛选赛季;另外也没把Season_ID加入结果集。现在我们需要补上这部分关联,同时精准筛选出最新赛季的记录。
完整的查询语句
SELECT p.Player_Order, p.Player_Type, p.Player_ID, p.Player AS Player_Name, SUM(pt.Point_Value) AS `Sum(Point_Value)`, r.Season_ID FROM Players p JOIN Points po ON p.Player_ID = po.Player_ID JOIN PointTypes pt ON po.PointType_ID = pt.PointType_ID JOIN Results r ON po.Result_ID = r.Result_ID WHERE r.Season_ID = (SELECT MAX(Season_ID) FROM Results) GROUP BY p.Player_Order, p.Player_Type, p.Player_ID, p.Player, r.Season_ID ORDER BY p.Player_Order, `Sum(Point_Value)` DESC, p.Player;
关键调整说明
- 关联Results表:通过
Points.Result_ID和Results.Result_ID关联,这样就能拿到每条积分记录对应的赛季ID,进而筛选最新赛季。 - 筛选最新赛季:用子查询
(SELECT MAX(Season_ID) FROM Results)直接获取当前最新的赛季ID,确保只统计该赛季的积分。 - 补充Season_ID字段:把
r.Season_ID加入SELECT列表,这样结果里就有你需要的赛季ID了。 - 优化GROUP BY:我把所有非聚合的字段都加入了GROUP BY(比如
Player_Order、Player_Type),这是为了适配MySQL的严格模式(ONLY_FULL_GROUP_BY开启时的要求),而且这些字段和Player_ID是一一对应的,不会影响统计结果。 - 显式JOIN语法:用显式的
JOIN替代你原来的隐式逗号分隔表,这样查询逻辑更清晰,也更容易维护。
这个查询会完美输出你要的结果集:按球员顺序、类型分组,显示每个球员的ID、名字、最新赛季的积分总和,以及对应的赛季ID。
内容来源于stack exchange
相关产品推荐
相关产品推荐

