我會解釋一個場景,公式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表,我需要它做一次。
任何幫助,非常感謝。
你可以張貼一些示例數據/輸出? –