2011-11-07 35 views
2

我會解釋一個場景,公式1,在公式1中每個團隊有2個司機,24個司機,12個團隊。我需要從team_stats表中得到以下計算得分,但從driver_stats表中獲得杆位,領獎臺和勝利,所以sebastion vettel和mark webber都是team_id ='3'的成員,這是紅牛。我需要從driver_stats表中爲他們每個得到杆位,領獎臺和勝利,並將它們彙總在一起,但是從team_stats表格計算TEAM的點數。我遇到的情況是,它爲每個team_id計算兩次團隊積分,因爲driver_stats表中有兩個驅動程序,我只需要它爲team_stats表中的點進行SUM就爲每個team_id的驅動程序是的成員。現在MYSQL SUM用於兩個不同表中的幾列

DRIVER_STATS TABLE 
| track_id | drivers_id | qual_pos | race_pos | overtakes | points 

TEAM STATS TABLE 
| track_id | team_id | points | 

DRIVERS TABLE 
| driver_id | drivername | team_id | 

TEAM TABLE COLUMNS 
|team_id | teamname | value 

低於這個工作,但來自driver_stats表計算的點,它的超越極等的款項..通過將兩個司機一起正確。我需要它爲team_stats表中的每個team_id的積分部分取代,對於driver_stats表中的每個2個驅動程序,該驅動程序只有一個出現在1個組中。

SELECT t.teamname, 
     t.value, 
     SUM(IF(s.qual_pos = '1', 1,0)) AS poles, 
     SUM(IF(s.race_pos <= '3', 1,0)) AS podiums, 
     SUM(IF(s.race_pos = '1', 1,0)) AS victories, 
     SUM(s.overtakes) AS overtakes, 
     SUM(CASE 
      WHEN s.track_id = (SELECT MAX(track_id) FROM driver_stats) THEN 
      points 
      ELSE 
      0 
     End) AS lastracepoints, 
     SUM(points) AS points 

    FROM   drivers d 
    INNER JOIN driver_stats s 
    ON   d.drivers_id = s.drivers_id 
    AND   d.team_id = 3 
    LEFT JOIN teams t 
    ON   d.team_id = t.team_id 
    GROUP BY 
    t.teamname 

這是我改變它的查詢,試圖實現它。

 SELECT t.teamname, 
     t.value, 
     SUM(IF(s.qual_pos = '1', 1,0)) AS poles, 
     SUM(IF(s.race_pos <= '3', 1,0)) AS podiums, 
     SUM(IF(s.race_pos = '1', 1,0)) AS victories, 
     SUM(s.overtakes) AS overtakes, 
     SUM(CASE 
      WHEN ts.track_id = (SELECT MAX(track_id) FROM team_stats) THEN 
      ts.points 
      ELSE 
      0 
     End) AS lastracepoints, 
     SUM(ts.points) AS points 

    FROM   drivers d 
    INNER JOIN driver_stats s 
    ON   d.drivers_id = s.drivers_id 
    AND   d.team_id = 3 
    LEFT JOIN teams t 
    ON   d.team_id = t.team_id 
    INNER JOIN team_stats ts 
    ON   ts.team_id = d.team_id 
    GROUP BY 
    t.teamname 

的數字有點失控,現在就這一個通過參加team_stats它和改變的總和點team_stats,它看起來就像是做兩次在每個驅動程序中team_stats表的總和driver_stats表,我需要它做一次。

任何幫助,非常感謝。

+1

你可以張貼一些示例數據/輸出? –

回答

0

不應該ts.team_id加入t.team_id,並觀看INNER JOIN,你可能會與另一個LEFT JOIN更好

相關問題