2016-06-15 8 views
1

複数のテーブルを結合してSUMコマンドを使用しようとしていますが、複数のテーブルを結合するとSUMが正常に動作しません。私が読んだトピック(ここや他の箇所)から、私が参加する前に解決策が総計されていることは確かですが、それを達成するのには苦労しています。MySQL:複数の結合とその合計に対する影響

私は2つだけのテーブルを結合し、次のコードを実行した場合、それは完璧に動作します:

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 

私が言ったように、私はソリューションが結合の前に合計することをかなり確信しています。それをどうやってやりますか?

ありがとうございます。

+0

にサブクエリを移動し、ピッチングにそれを結合することができます。 'SELECT blah FROM(元のクエリ)AS q LEFT JOINピッチング...' _もちろん、サブクエリの結果に結合フィールドを含める必要があります。 – Uueerdo

答えて

0

1つの手法は、テーブルを要約し、次にそれらのテーブルにJOINすることです。

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 
関連する問題