【问题标题】:MySQL grouping problemMySQL 分组问题
【发布时间】:2011-10-31 01:39:14
【问题描述】:

我有一个运动追踪器 MySQL 数据库,我正在尝试提取一些统计数据;相关表格概述如下:

游戏

id bigint(20) 无符号 PK
round_id bigint(20)
team_1_id bigint(20) 无符号
team_2_id bigint(20) 无符号
日期日期时间

团队

id bigint(20) 无符号 PK
名称 varchar(128)

播放器(此查询并不真正需要)

id bigint(20) 无符号 PK
名字 varchar(128)
姓氏 varchar(128)
出生日期时间

player_team_game

id bigint(20) 无符号 PK
game_id bigint(20) 无符号
player_id bigint(20) 无符号
team_id bigint(20)

统计数据

id bigint(20) PK
player_team_game_id bigint(20)
踢 int(11)
目标 int(11)
处理 int(11)

目的是确定每支球队在每场比赛中的总踢球次数、进球数和抢断次数。示例结果集可能如下所示:

game.id    | game.date    | team.name    | stats.kicks    | stats.goals    | stats.tackles  
1          | 2011-01-01   | team1        | 25             | 30             | 35  
1          | 2011-01-01   | team2        | 26             | 31             | 36  
2          | 2011-01-01   | team3        | 27             | 32             | 37  
2          | 2011-01-01   | team4        | 28             | 33             | 38  
3          | 2011-01-02   | team5        | 29             | 34             | 39  
3          | 2011-01-02   | team6        | 30             | 35             | 40  

谁能帮助我进行适当的查询?

编辑:可能我没有把问题说清楚;问题是游戏表同时具有 game.team_id_1 和 game.team_id_2,因此分组需​​要在单独的记录集中反映每个团队的结果。

【问题讨论】:

  • 出于好奇 - 我的答案中的 SQL 是否在没有任何修改的情况下为您工作?

标签: mysql group-by


【解决方案1】:

试试这个:

SELECT
    g.id, g.date,
    t.name,
    SUM(s.kicks),
    SUM(s.goals), 
    SUM(s.tackles)
FROM stats s
LEFT JOIN player_team_game ptg ON ptg.id = s.player_team_game_id
LEFT JOIN game g ON g.id = ptg.game_id
LEFT JOIN team t ON t.id = ptg.team_id
GROUP BY ptg.team_id
ORDER BY g.id, t.id

【讨论】:

  • 不完全;首先,按 player_team_game 分组将给出玩家的总分,而不是球队的总分。此外,真正的问题是按 team.id 和 game.id 分组并没有分离出 game.team_1_id 和 game.team_2_id 的结果。可能我的问题没有说清楚。我会在上面添加更多细节。
  • 感谢您的澄清。我认为第一个问题可以通过更改GROUP BY 子句来轻松解决,第二个问题可以通过添加ORDER BY 子句来解决。查看我的编辑。
  • 感谢马特 - 这非常接近。在 ptg.team_id 之前按 ptg.game_id 分组按比赛和球队分组统计数据,这是期望的结果。再次感谢。
【解决方案2】:

我认为下面应该给出你想要的结果。

select game.id, game.date, team.name, 
sum (stats.kicks), sum (stats.goals), sum (stats.tackles)
from game, player_team_game, stats, team
where player_team_game.game_id = game.id
and player_team.game.team_id = team.id
and player_team_game.id = stats.player_team_game_id
group by game.id, game.date, team.name 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多