-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;
をしかし、この1つはプレイヤーごとに間違った合計を与える:
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;
(PLAYERSテーブルに参加しました)私は何を理解していません誤算の原因となっているのはなぜですか?私は私の作品のクエリを考え出したコメントで見つかっ助けを借りて
結果を特定の順序にする場合は、最も外側の 'SELECT'に' ORDER BY'を含める必要があります。期間。 –
LEFT JOINは通常のINNER JOINと同じように実行されます。右のテーブル条件をWHEREからONに移動して、真のLEFT JOIN結果を取得します。 – jarlh