2017-05-08 54 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。