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

MySQLでランクを計算する方法

    多くの場合、MySQLでランクを計算する必要があります。番号またはテキストで並べ替えることはできますが、MySQLでランクを簡単に計算することはできません。使用できるクエリは次のとおりです。テーブル名を置き換えるだけですスコア および列名id、score。

    値の増加に基づいてMySQLのランクを計算します

    例:

    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 |
    +----+------+

    次のようなランキング変数を使用します:

    SELECT    id,score,
              @curRank := @curRank + 1 AS rank
    FROM      scores p, (SELECT @curRank := 0) r
    ORDER BY  score;

    (SELECT @curRank := 0)

    一部では、個別のSETコマンドを必要とせずに変数の初期化が可能です。

    Result:
    +----+------+------+
    | id | score| rank |
    +----+------+------+
    | 2  |   10 |    1 |
    | 6  |   18 |    2 |
    | 5  |   20 |    3 |
    | 4  |   22 |    4 |
    | 3  |   30 |    5 |
    | 1  |   35 |    6 |
    | 7  |   36 |    7 |
    +----+------+------+
    7 rows in set (0.02 sec)

    値の減少に基づいてMySQLのランクを計算します

    スコアの降順に基づいてMySQLのランクを計算する場合は、クエリにキーワードDESCを追加するだけです。

    SELECT    id,score,
              @curRank := @curRank + 1 AS rank
    FROM      scores p, (SELECT @curRank := 0) r
    ORDER BY  score DESC;

    結果:

    1. 最適化のしきい値–データのグループ化と集約、パート5

    2. Oracleのユーザーからのすべての特権を表示するにはどうすればよいですか?

    3. IDの一致に基づいた1つのテーブルから別のテーブルへのSQL更新

    4. データベースへのコメントやいいねの実装