sql >> データベース >  >> RDS >> Mysql

MySQLでn番目のランクを見つける方法は?

    多くの場合、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番目のランクを取得できます。

    1. MySQLエラー#1071-指定されたキーが長すぎました。キーの最大長は767バイトです

    2. MySQL 1つのテーブルからすべての列を選択し、別のテーブルからいくつかの列を選択します

    3. SQLite onUpgrade()のフラストレーション

    4. ADOパラメータ化クエリで変数@myvariableエラーを宣言する必要があります