上記の質問に対して、今回使用した関数を使用しない場合、答えは次のようになります。つまり、MySQL がこの記事の関数を使用できない場合、置換のために次の文法ロジックを渡すことができます。
SELECT t1.Score as Score, ( SELECT COUNT(DISTINCT t2.Score) FROM Scores t2 WHERE t2.Score >= t1.Score ) AS `Rank` FROM Scores t1 ORDER BY t1.Score DESC
関数: 指定した条件を調べて順位付け、条件が同じであれば順位も同じ、ランキングは不連続となります。
この関数は、生徒のランキングに使用できます。この場合、同じ成績を持つ 2 人の生徒が同点となり、次の生徒がそのポジションを空けることになります。つまり: 1 1 3 4 5 5 7
SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student##dense_rank() over (ビジネス ロジック)
関数:指定された条件以降のものを順位付けします 条件が同じ場合は同じ順位になります 順位は不連続です注: これは、rank() over と同じ効果がありますが、違いは、dense_rank() over ランキングが密で連続的であることです。この機能を使用して生徒のランキングを決定します。同点の場合は 2 名が同順位となり、次の順位に基づいて次位の生徒が決定されます。つまり: 1 1 2 3 4 5 5 6row_number() over (ビジネス ロジック)SELECT id, name, score, dense_rank() over(ORDER BY score DESC) AS 'rank' FROM student
関数: Find out 条件を指定してランキングを行っており、同じ条件でもランキングが異なり、不連続なランキングとなります。 この関数は、クエリされた値が同じであっても、並列かどうかを考慮せずに連続的にソートします。つまり: 1 2 3 4 5 6PostscriptSELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student
関数内のビジネス ロジックは複雑になる可能性がありますが、そうではありません。 ORDER BY に限定されますが、PARTITION BY を追加することもできます。 rreeee
以上がMySQL で Rank() over、dense_rank() over、row_number() over を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。