2017-05-08 59 views
-1

讓我解釋我的查詢。它總結每個球員的最佳5個分數,並且比這些分數的排名更高。第一個查詢是可行的,但是當我添加一個玩家表來添加玩家的全名時,它會加擾總和,並且每個玩家的總數是不正確的。當表連接查詢訂單加擾

這個查詢給出每個玩家的好總分:

SET @score_rank := 0; 
SET @current_player = ''; 
SET @topN = 5; 
Select ATLEET_ID as ID, SUM(SCORE) as SUMSUM 
    From (Select r.ATLEET_ID, r.SCORE, k.SEASON, k.TYPE, 
    @score_rank := IF(@current_player = r.ATLEET_ID, (@score_rank + 1), 1) AS score_rank, 
    @current_player := r.ATLEET_ID 
    From RESULTATEN r LEFT JOIN KALENDER k ON (r.KALENDER_ID = k.KALENDER_ID) 
    Where k.TYPE = 'Cup' AND k.SEASON = '2016-2017' 
    Order By r.ATLEET_ID, r.SCORE DESC) sorted 
Where score_rank <= @topN 
Group By ID; 

但這一次給出了每個玩家的錯總:(加盟球員表)

SET @score_rank := 0; 
SET @current_player = ''; 
SET @topN = 5; 
Select ATLEET_ID as ID, SUM(SCORE) as SUMSUM 
    From (Select r.ATLEET_ID, r.SCORE, k.SEASON, k.TYPE, 
    @score_rank := IF(@current_player = r.ATLEET_ID, (@score_rank + 1), 1) AS score_rank, 
    @current_player := r.ATLEET_ID 
    From RESULTATEN r LEFT JOIN KALENDER k ON (r.KALENDER_ID = k.KALENDER_ID) JOIN PLAYERS s ON (r.ATLEET_ID = s.PLAYER_ID) 
    Where k.TYPE = 'Cup' AND k.SEASON = '2016-2017' 
    Order By r.ATLEET_ID, r.SCORE DESC) sorted 
Where score_rank <= @topN 
Group By ID; 

我不明白是什麼導致錯誤計算或爲什麼會發生這種情況。

+3

如果您想按特定順序得到結果,則需要在最外面的SELECT中包含一個ORDER BY。期。 –

+0

您的LEFT JOIN以常規INNER JOINs的形式執行...將右側表格的條件從WHERE移動到ON,以獲得true LEFT JOIN結果! – jarlh

回答

0

隨着在評論中發現的幫助下,我想通了,對我的作品的查詢:

SET @score_rank := 0; 
SET @current_player = ''; 
SET @topN = 5; 
Select ATLEET_ID as ID, SUM(SCORE) as SUMSUM 
From (Select r.ATLEET_ID, r.SCORE, k.SEASON, k.TYPE, @score_rank := IF(@current_player = r.ATLEET_ID, (@score_rank + 1), 1) AS score_rank, @current_player := r.ATLEET_ID 
    From RESULTATEN r 
    Inner join KALENDER k on (r.KALENDER_ID = k.KALENDER_ID) and SEIZOEN = '2016-2017' and WEDSTRIJDTYPE = 'Dutch Cup snowboard' 
    Order By r.ATLEET_ID, r.SCORE DESC) sorted 
Left join PLAYERS on (sorted.ATLEET_ID = s.PLAYER_ID) 
Where score_rank <= @topN 
Group by ID; 
ORDER BY SUMSUM DESC LIMIT 0, 2000; 

我感動與球員從表內選擇加入到外選擇。而且我將右側桌子的條件從WHERE移到了ON。