2013-10-14 25 views
1

嗨看看下面的表格: 隊,teamPoints,team_members,pointsTable 我試圖總結團隊成員分,然後求和隊分:加入和SUMS?

Teams 
|TeamID |TeamName | TeamLocation| 
------------------------------- 
|1  | sm1  | location1| 
|2  | sm2  | location2| 


TeamPoints 
|TeamID |TotalPonts | RemainderPonts| 
------------------------------- 
|1  | 10   | 7   | 
|1  | 8   | 6   | 
|2  | 8   | 6   | 


team_members 
|TeamID |UserID | 
----------------- 
|1  | 1  | 
|1  | 2  | 
|2  | 3  | 


pointsTable 
|UserID |TotalPonts | RemainderPonts| 
------------------------------- 
|1  | 10   | 7   | 
|2  | 8   | 6   | 
|2  | 8   | 6   | 


so results for team sm1 (TeamID =1) should be 

TeamName=sm1,TeamPoints.TotalPonts =18, TeamPoints.RemainderPonts=13 
pointsTable.TotalPonts =26, pointsTable.RemainderPonts=19 

這工作總結成員分,但有麻煩與球隊分

SELECT 
    teams.TeamID AS theTeamID, 
    teams.TeamName, 
    teams.TeamLocation, 
    team_members.TeamID, 
    team_members.UserID, 
    SUM(pointstable.RemainderPoints) AS points 
FROM 
    teams 
     LEFT JOIN 
    team_members ON teams.TeamID = team_members.TeamID 
     LEFT JOIN 
    pointstable ON team_members.UserID = pointstable.UserID 
GROUP BY teams.TeamID 

試圖

SELECT 
    teams.TeamID AS theTeamID, 
    teams.TeamName, 
    teams.TeamLocation, 
    team_members.TeamID, 
    team_members.UserID, 
    SUM(pointstable.RemainderPoints) AS points, 
    teampoints.TeamID AS tpID, 
    SUM(teampoints.TotalPoints) AS teamRedeamable 
FROM 
    teams 
     LEFT JOIN 
    team_members ON teams.TeamID = team_members.TeamID 
     LEFT JOIN 
    pointstable ON team_members.UserID = pointstable.UserID 
     LEFT JOIN 
    teampoints ON teams.TeamID = teampoints.TeamID 
GROUP BY teams.TeamID 

但似乎改變/乘以原始值 也嘗試過選擇,但需要一些如何組?

任何幫助,歡迎

+1

你總結團隊的所有觀點還是團隊成員?你是否忘了按團隊分組.TeamID,team_members.UserID' –

+0

需要爲該團隊總結所有積分,因此,如果3個成員和每個積分共有5分是15,如果我按UserID分組,則會創建太多記錄,我每個隊伍只需要1條記錄 – Roy

+0

組隊除了隊伍積分之外的所有隊伍,請留下總數中的所有內容,從選擇中的team_members中刪除所有內容。只要你在那裏有團隊成員信息,你就會得到每個成員的記錄....如果你需要這些信息,通過查詢與你的團隊的結果一起加入。 –

回答

1

認爲你需要一個子查詢來獲取用戶分表的細節,並加入該對主表: -

SELECT 
    teams.TeamID AS theTeamID, 
    teams.TeamName, 
    teams.TeamLocation, 
    SUM(pointstable.RemainderPoints) AS RemainderPonts, 
    SUM(pointstable.TotalPonts) AS TotalPonts, 
    Sub1.UserTotalPoints, 
    Sub1.UserRemainderPoints, 
    Sub2.TeamTotalPoints, 
    Sub2.TeamRemainderPoints 
FROM teams 
LEFT JOIN team_members ON teams.TeamID = team_members.TeamID 
LEFT JOIN pointstable ON team_members.UserID = pointstable.UserID 
LEFT OUTER JOIN 
(
    SELECT TeamID, SUM(TotalPoints) AS UserTotalPoints, SUM(RemainderPoints) AS UserRemainderPoints 
    FROM team_members 
    INNER JOIN pointsTable 
    ON team_members.UserID = pointsTable.UserID 
    GROUP BY TeamID 
) Sub1 
ON Sub1.TeamID = teams.TeamID 
LEFT OUTER JOIN 
(
    SELECT TeamID, SUM(TotalPoints) AS TeamTotalPoints, SUM(RemainderPoints) AS TeamRemainderPoints 
    FROM TeamPoints 
    GROUP BY TeamID 
) Sub2 
ON Sub0.theTeamID = Sub2.TeamID 
GROUP BY teams.TeamID, teams.TeamName, teams.TeamLocation 

注意,這是稍微躲閃它在SELECT中包含非聚合列,它們不在GROUP BY子句中。在這種情況下,默認的MySQL設置應該沒問題,但是如果使用不同的數據庫(或者取決於MySQL設置),您可能需要將其作爲2個不同的子查詢並將它們結合在一起。

SELECT Sub0.theTeamID, Sub0.TeamName, Sub0.TeamLocation, Sub0.RemainderPonts, Sub0.TotalPonts, Sub1.UserTotalPoints, Sub1.UserRemainderPoints, Sub2.TeamTotalPoints, Sub2.TeamRemainderPoints 
FROM 
(
    SELECT 
     teams.TeamID AS theTeamID, 
     teams.TeamName, 
     teams.TeamLocation, 
     SUM(pointstable.RemainderPoints) AS RemainderPonts, 
     SUM(pointstable.TotalPonts) AS TotalPonts 
    FROM teams 
    LEFT OUTER JOIN team_members ON teams.TeamID = team_members.TeamID 
    LEFT OUTER JOIN pointstable ON team_members.UserID = pointstable.UserID 
) Sub0 
LEFT OUTER JOIN 
(
    SELECT TeamID, SUM(TotalPoints) AS UserTotalPoints, SUM(RemainderPoints) AS UserRemainderPoints 
    FROM team_members 
    INNER JOIN pointsTable 
    ON team_members.UserID = pointsTable.UserID 
    GROUP BY TeamID 
) Sub1 
ON Sub0.theTeamID = Sub1.TeamID 
LEFT OUTER JOIN 
(
    SELECT TeamID, SUM(TotalPoints) AS TeamTotalPoints, SUM(RemainderPoints) AS TeamRemainderPoints 
    FROM TeamPoints 
    GROUP BY TeamID 
) Sub2 
ON Sub0.theTeamID = Sub2.TeamID 
+0

嗨,感謝您的回答,我運行了查詢,但注意到它只是從點表求和,我需要總結teampoints.TotalPoints,按照我的第二個代碼塊,我試圖編輯您的代碼來執行此操作,但還沒有得到它的工作,將繼續嘗試 – Roy

+0

已編輯的代碼添加這些計數,雖然沒有測試它。希望有所幫助 – Kickstart