MySQL如何将两个JOINed表的SUM()列转换为新列?

phe

大家早上好/晚上好,

我正在尝试(LEFT)将两个表联接到一个表中,并SUM()匹配ON fk_id = id...语句的特定列的值表格如下所示:

ws1表:

ws1表

ws2表:

ws2表

到目前为止我尝试过的查询:

SELECT
    alias.name alias,   
    (SUM(IFNULL(ws1.teamkills,0)) + SUM(IFNULL(ws2.teamkills,0))) teamkills
FROM pickup
    JOIN player ON player.pickup_id = pickup.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
    LEFT JOIN weapon_stats_2 ws2 ON ws2.pickup_id = pickup.id AND ws2.player_id = player.id
WHERE pickup.logfile_name = 'srv-20130725-2151-log' GROUP BY player.id

结果:

查询结果

和:

SELECT
    alias.name alias,   
    (SUM(DISTINCT IFNULL(ws1.teamkills,0)) + SUM(DISTINCT IFNULL(ws2.teamkills,0))) teamkills
FROM pickup
    JOIN player ON player.pickup_id = pickup.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
    LEFT JOIN weapon_stats_2 ws2 ON ws2.pickup_id = pickup.id AND ws2.player_id = player.id
WHERE pickup.logfile_name = 'srv-20130725-2151-log' GROUP BY player.id

结果:

查询结果

我了解SUM(DISTINCT.... )return 2,因为DISTINCT仅选择一个具有相同值的结果。

我的目标是获取SUM()两个teamkills字段的并将它们加在一起。在这个例子中,它应该返回3哪里player_id4我怎样才能做到这一点?

编辑:

表“玩家”:

在此处输入图片说明

表“提取”:

在此处输入图片说明

鳄鱼

您需要两个从属子查询,而不是ws1 + ws2的联接,jonin在这里不起作用。
就像是:

SELECT id, player_alias,
       ( SELECT sum( teamkills ) FROM ws1
         WHERE ws1.player_id = player.id )
        +
       ( SELECT sum( teamkills ) FROM ws2
         WHERE ws2.player_id = player.id ) as total
FROM player
JOIN alias ON ......

这里是SQLFiddle demo,请查看第一个查询(以及下面的结果集)以更好地理解为什么您从联接中得到错误的结果,以及通常来说联接是如何工作的。

联接将一个表中的每个记录组合(粘合)到另一表中的所有符合记录(符合联接条件)的记录(在您的情况下,它会产生4行,其中包含重复的数据)。

此演示中的第三个查询是一个给出正确结果的相关子查询的示例(例如此演示中的数据)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将两个坐标列转换为Shapely点的列

如何将这两个查询循环转换为单个JOINed查询?

如何将JSON列表转换为CSV文件中的两个不同列?

如何将两个DataFrame列转换为汇总系列?

如何将具有相同列的两个表转换为一个累加计数并按第三表分组

MySQL:如何将两个表与一个列合并?

从两个表中选择,将一个表中的行转换为列

使用Pandas将多列转换为数据框中的两个新列

如何将单独的年和月列转换为单个日期并获得两个日期之间的月/日差

如何将非数字变量列转换为两个数字变量列?

如何将列值转换为数据表中的新列?

如何将3个表转换为3列但一个表

使用 Pivot 将两个表的行转换为 SQL Server 中的列

如何将具有两个索引列和一个值列的 pandas 数据框转换为热图?

如何将两个熊猫列转换为字典,但将同一第一列(键)的所有值合并为一个键?

Excel:如何将两个工作表中的两列与条件匹配?

MySQL组使用两个串联的列将concat转换为Postgres

如何从两个或多个表转换为汇总功能的行与列?

如何将两个选定的列合并到一个表中?

如何将一列中的值转换为新表的标题?

如何将一个记录转换为两个记录,然后将其插入表中?

如何将两列值转换为键值对字典?

如何将“标题”行转换为新列

如何将数据行转换为新列?

mysql如何将行结果转换为具有新列名的列?

如何将两个表按不同的列分组?

如何将两个不同的表与不同的列组合

如何将两个表连接到哪一列

如何将两个表中的值包含在同一列中