【问题标题】:MySQL join table that returns multiple rows as one result, SUM()med up?MySQL连接表返回多行作为一个结果,SUM() med up?
【发布时间】:2013-07-25 21:55:52
【问题描述】:

我在这里遇到了一个问题:运行以下查询时,我只返回一行,即使它应该返回“在皮卡中找到的每个玩家、他的昵称、他效力的球队、他的 ID 和总金额他在一次比赛(比赛)中所杀的人”

SELECT alias.name alias, team.name team, sid.steam_id steam_id, 
      SUM(kills) kills_total 
FROM pickup
    JOIN player ON player.pickup_id = pickup.id
    JOIN team ON player.team_id = team.id
    JOIN sid ON player.sid_id = sid.id
    JOIN alias ON player.alias_id = alias.id
    JOIN weapon_stats_1 ws1 ON ws1.pickup_id = pickup.id AND ws1.player_id = player.id
WHERE pickup.logfile_name = 'logfilename'

weapon_stats_1 表看起来:

为了说明它更具可读性,可以这样看:

pickup_id     player_id    weapon_id    kills    teamkills
logfilename1  0:0:1        Shotgun      12       2
logfilename1  0:0:1        RPG          19       0
logfilename1  0:0:2        Grenade      5        8

我想要做的是通过使用 SUM() 将其汇总来获取 kills 的总数,并将其作为结果列添加到上面的查询中。对于这个例子,它应该返回类似于:

alias        team   steam_id    kills_total
nickname1    Red    0:0:1       31
nickname2    Blue   0:0:2       5

当我删除 JOIN Weapon[...] 行时,查询会返回我想要的结果 - 在这种特定情况下为 pickup.logfile_name = 'logfilename' 看起来像:

我不明白我做错了什么以及为什么当我JOIN weapon_stats_1 ws1 [...] 时查询只返回ONE 行(一个玩家)。我如何实现我想要做的事情?

问候

【问题讨论】:

  • 非常感谢,如果我在 3 小时前才知道这一点。现在就像一个魅力,只需附加 `GROUP BY player.id,pick.id` 并返回我想要的所有内容。

标签: mysql join many-to-many sum rows


【解决方案1】:
SELECT alias.name alias, team.name team, sid.steam_id steam_id, 
      SUM(kills) kills_total 
FROM pickup
    JOIN player ON player.pickup_id = pickup.id
    JOIN team ON player.team_id = team.id
    JOIN sid ON player.sid_id = sid.id
    JOIN alias ON player.alias_id = alias.id
    LEFT JOIN weapon_stats_1 ws1 ON ws1.pickup_id = pickup.id AND ws1.player_id = player.id
WHERE pickup.logfile_name = 'logfilename' GROUP BY player.id, pickup.id

感谢@otzy

【讨论】:

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