ホームページ  >  記事  >  データベース  >  MySQL で Rank() over、dense_rank() over、row_number() over を使用する方法

MySQL で Rank() over、dense_rank() over、row_number() over を使用する方法

PHPz
PHPz転載
2023-05-26 19:55:291573ブラウズ

MySQL で Rank() over、dense_rank() over、row_number() over を使用する方法

上記の質問に対して、今回使用した関数を使用しない場合、答えは次のようになります。つまり、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

rank() over (ビジネスロジック)

関数: 指定した条件を調べて順位付け、条件が同じであれば順位も同じ、ランキングは不連続となります。

この関数は、生徒のランキングに使用できます。この場合、同じ成績を持つ 2 人の生徒が同点となり、次の生徒がそのポジションを空けることになります。つまり: 1 1 3 4 5 5 7

SELECT id, name, score, rank() over(ORDER BY score DESC) AS 'rank' FROM student

MySQL で Rank() over、dense_rank() over、row_number() over を使用する方法

##dense_rank() over (ビジネス ロジック)

関数:指定された条件以降のものを順位付けします 条件が同じ場合は同じ順位になります 順位は不連続です

注: これは、rank() over と同じ効果がありますが、違いは、dense_rank() over ランキングが密で連続的であることです。この機能を使用して生徒のランキングを決定します。同点の場合は 2 名が同順位となり、次の順位に基づいて次位の生徒が決定されます。つまり: 1 1 2 3 4 5 5 6

SELECT id, name, score, dense_rank() over(ORDER BY score DESC) AS 'rank' FROM student

MySQL で Rank() over、dense_rank() over、row_number() over を使用する方法

row_number() over (ビジネス ロジック)

関数: Find out 条件を指定してランキングを行っており、同じ条件でもランキングが異なり、不連続なランキングとなります。

この関数は、クエリされた値が同じであっても、並列かどうかを考慮せずに連続的にソートします。つまり: 1 2 3 4 5 6

SELECT id, name, score, row_number() over(ORDER BY score DESC) AS 'rank' FROM student

MySQL で Rank() over、dense_rank() over、row_number() over を使用する方法

Postscript

関数内のビジネス ロジックは複雑になる可能性がありますが、そうではありません。 ORDER BY に限定されますが、PARTITION BY を追加することもできます。

rreeee

MySQL で Rank() over、dense_rank() over、row_number() over を使用する方法

以上がMySQL で Rank() over、dense_rank() over、row_number() over を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。