使用SUM多在mysql中加入(Using SUM with multiple joins in m

2019-08-05 06:02发布

我一直在寻找一个解决方案,这一点,有很多的类似的问题,但没有任何正确的答案,帮助我解决了问题。

首先,我的问题/问题:

  1. 我要总结,并在多连接查询计数某些列
  2. 是没可能有多个连接? 我一定要窝SELECT查询?

这里是我的数据库与样本数据的SQL转储: http://pastie.org/private/vq7qkfer5mwyraudb5dh0a

这是我想会做的伎俩查询:

SELECT firstname, lastname, sum(goal.goal), sum(assist.assist), sum(gw.gw), sum(win.win), count(played.idplayer) FROM player
LEFT JOIN goal USING (idplayer)
LEFT JOIN assist USING (idplayer)
LEFT JOIN gw USING (idplayer)
LEFT JOIN win USING (idplayer)
LEFT JOIN played USING (idplayer)
GROUP BY idplayer

我想这是什么产生是一个表,其中列的目标,协助,毛重,赢得并发挥在该列的每一行的总和/计数,像这样:(与提供的样本数据)

+-----------+----------+------+--------+----+-----+--------+
| firstname | lastname | goal | assist | gw | win | played |
+-----------+----------+------+--------+----+-----+--------+
| Gandalf   | The White|   10 |      6 |  1 |   1 |      2 |
| Frodo     | Baggins  |   16 |      2 |  1 |   2 |      2 |
| Bilbo     | Baggins  |    7 |      3 |  0 |   0 |      2 |
+-----------+----------+------+--------+----+-----+--------+

所以,再次重复上面的问题,这可能与一个查询和多连接?

如果您提供的解决方案/查询, 请解释一下他们! 我是新来的适当关系数据库和我从来没有用过这个项目之前加入。 如果你避开别名,除非必要我也很感激。

我已经跑不和,分组上面的查询,我得到一组行的每一列我做的SELECT上,我怀疑,然后乘或加在一起,但我的印象是,分组和/或做sum(TABLE.COLUMN)会解决。

另一件事是,我认为,做一个SELECT DISTINCT或任何其他DISTINCT操作将无法工作,因为这将会使一些(“重复”)的结果。

PS。 如果它的事项,我开发的机器是WAMP但版本将在Ubuntu /阿帕奇/ MySQL的/ PHP的。

Answer 1:

要理解为什么你没有得到你所期望的答案,看看这个查询:

SELECT * FROM player LEFT JOIN goal USING (idplayer)

正如你所看到的,左侧的行被复制给右侧的匹配行。 重复这个步骤,对每个加盟。 以下是为您的查询的原始数据:

SELECT * FROM player
LEFT JOIN goal USING (idplayer)
LEFT JOIN assist USING (idplayer)
LEFT JOIN gw USING (idplayer)
LEFT JOIN win USING (idplayer)
LEFT JOIN played USING (idplayer)

那些重复的值,然后用于SUM计算。 总和需要行结合之前进行计算:

SELECT firstname, lastname, goals, assists, gws, wins, games_played
FROM player
INNER JOIN 
  (SELECT idplayer, SUM(goal) AS goals FROM goal GROUP BY idplayer) a
  USING (idplayer)
INNER JOIN
  (SELECT idplayer, SUM(assist) AS assists FROM assist GROUP BY idplayer) b
  USING (idplayer)
INNER JOIN
  (SELECT idplayer, SUM(gw) AS gws FROM gw GROUP BY idplayer) c
  USING (idplayer)
INNER JOIN
  (SELECT idplayer, SUM(win) AS wins FROM win GROUP BY idplayer) d
  USING (idplayer)
INNER JOIN
  (SELECT idplayer, COUNT(*) AS games_played FROM played GROUP BY idplayer) e
  USING (idplayer)

SQLFiddle



文章来源: Using SUM with multiple joins in mysql