-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;
我不明白是什么导致错误计算或为什么会发生这种情况。
如果您想按特定顺序得到结果,则需要在最外面的SELECT中包含一个ORDER BY。期。 –
您的LEFT JOIN以常规INNER JOINs的形式执行...将右侧表格的条件从WHERE移动到ON,以获得true LEFT JOIN结果! – jarlh