多くの場合、MySQLでn番目のランクを見つける必要があります。たとえば、生徒のクラスで3位を見つけます。スコアでランク付けされた学生。 MySQLでn番目のランクを見つけるために、最初にレコードをランク付けします。次に、MySQLでn番目のランクをフィルタリングします。使用できるクエリは次のとおりです。テーブル名を置き換えるだけですスコア および列名id、score。
値の増加に基づいてMySQLでn番目のランクを見つける
例:
CREATE TABLE score (id int, score int); INSERT INTO scores VALUES (1, 35),(2, 10),(3,30),(4,22),(5,20),(6,18),(7,36); Scores: +----+------+ | id | score| +----+------+ | 1 | 35 | | 2 | 10 | | 3 | 30 | | 4 | 22 | | 5 | 20 | | 6 | 18 | | 7 | 36 | +----+------+
ここにランク3のレコードがあります 。次のクエリは、スコアの増加に基づいてレコードをランク付けします。次に、ランク3のレコードをフィルタリングします。
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score) WHERE rank = 3;
(SELECT @curRank := 0)
一部では、個別のSETコマンドを必要とせずに変数の初期化が可能です。
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
値の減少に基づいてMySQLでn番目のランクを見つける
スコアの降順に基づいてMySQLでn番目のランクを検索する場合は、クエリにキーワードDESCを追加するだけです。ここにランク3のレコードがあります。
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score DESC) WHERE rank=3;
結果:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
上記の方法を適用して、給与、従業員数など、あらゆる種類のメトリックのn番目のランクを取得できます。