[英]MySQL: Multiple joins and their effect on sums
我正在尝试连接多个表并使用SUM命令,当我加入多个表时,我无法使SUM正常工作。 从我在这个主题上所做的(这里和其他地方)的阅读,我相当确定解决方案是在我加入之前求和,但我很难完成这项工作。
如果我运行以下代码,只加入两个表,它可以完美地运行:
SELECT CONCAT(m.nameFirst, " ",m.nameLast) AS Name, sum(b.g) AS G,sum(b.ab) AS AB, sum(b.h) AS H, sum(b.hr) AS HR, sum(b.sb) AS SB, sum(b.bb) AS BB, ROUND(sum(b.h)/sum(b.ab), 3) AS BA, ROUND((sum(b.h)+sum(b.bb)+sum(b.hbp))/(sum(b.ab)+sum(b.bb)+sum(b.hbp)+sum(b.sf)), 3) AS OBP, ROUND((sum(b.h)+sum(b.2b)+2*sum(b.3b)+3*sum(b.hr))/sum(b.ab), 3) as SLG
FROM Master m
JOIN Batting b on m.playerID = b.playerID
WHERE birthMonth = 6 and birthDay = 15
Group by b.playerID
ORDER by b.h DESC
如果我这样做,在连接中添加第三个表,它会破坏总和:
SELECT CONCAT(m.nameFirst, " ",m.nameLast) AS Name, sum(b.g) AS G,sum(b.ab) AS AB,
[exact same code as above removed for the sake of brevity]
sum(p.W) as WINS
FROM Master m
left JOIN Batting b on m.playerID = b.playerID
left join Pitching p on m.playerID = p.playerID
WHERE birthMonth = 6 and birthDay = 15
Group by m.playerID
ORDER by b.h DESC
正如我所说,我很确定解决方案是在连接之前求和。 我该怎么做呢?
提前致谢。
一种技术是总结表格,然后在这些表格上加入。
SELECT CONCAT(m.nameFirst, " ",m.nameLast) AS Name
, b.G AS G, b.AB AS AB
, p.W as WINS
FROM Master m
LEFT JOIN
(SELECT playerID, SUM(g) AS G, SUM(ab) AS AB
FROM Batting
GROUP BY playerID) AS b
ON m.playerID = b.playerID
LEFT JOIN
(SELECT playerID, sum(W) AS WINS
FROM Pitching
GROUP BY playerID) AS p
ON m.playerID = p.playerID
WHERE birthMonth = 6 and birthDay = 15
您始终可以将子查询移动到SELECT结构中
SELECT CONCAT(m.nameFirst, " ",m.nameLast) AS Name
, (SELECT SUM(g)
FROM Batting AS b
WHERE m.playerID = b.playerID) AS G
, (SELECT SUM(ab)
FROM Batting
WHERE m.playerID = b.playerID) AS AB
, (SELECT sum(W)
FROM Pitching AS p
WHERE m.playerID = p.playerID) AS WINS
FROM Master m
WHERE birthMonth = 6 and birthDay = 15
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.