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

mysqlの並べ替えとランキングステートメント

    別のテーブルを使用することは避けます。単一のクエリで十分です。

    create table mytable (
    id int not null auto_increment primary key,
    username varchar(50),
    email varchar(50),
    number int
    ) engine = myisam;
    
    insert into mytable (username,email,number)
    values 
    ('a','aaa',10),
    ('b','bbb',30),
    ('c','ccc',50),
    ('d','ddd',30),
    ('e','eee',20),
    ('f','fff',45),
    ('g','ggg',20);
    
    select @r:[email protected]+1 as rnk,username,email,number
    from mytable,(select @r:=0) as r order by number desc
    
    +------+----------+-------+--------+
    | rnk  | username | email | number |
    +------+----------+-------+--------+
    |    1 | c        | ccc   |     50 |
    |    2 | f        | fff   |     45 |
    |    3 | b        | bbb   |     30 |
    |    4 | d        | ddd   |     30 |
    |    5 | e        | eee   |     20 |
    |    6 | g        | ggg   |     20 |
    |    7 | a        | aaa   |     10 |
    +------+----------+-------+--------+
    7 rows in set (0.00 sec)
    

    これは、関係を考慮したよりスマートなバージョンです

    select @r:[email protected] + 1 as rn, username,email,
    @pos:= if(@previous<>number,@r,@pos) as position,
    @previous:=number as num
    from mytable,(select @r:=0,@pos:=0,@previuos:=0) as t order by number desc 
    
    +------+----------+-------+----------+--------+
    | rn   | username | email | position | num    |
    +------+----------+-------+----------+--------+
    |    1 | c        | ccc   |        1 |     50 |
    |    2 | f        | fff   |        2 |     45 |
    |    3 | b        | bbb   |        3 |     30 |
    |    4 | d        | ddd   |        3 |     30 |
    |    5 | e        | eee   |        5 |     20 |
    |    6 | g        | ggg   |        5 |     20 |
    |    7 | a        | aaa   |        7 |     10 |
    +------+----------+-------+----------+--------+
    7 rows in set (0.00 sec)
    


    1. LAST_DAY()がMariaDBでどのように機能するか

    2. 月の最後の日を見つけるためのSQLクエリ

    3. Windows10のMySQL8.xでlower_case_table_namesを設定できません

    4. MySQLとPHPで使用するのに最適な照合は何ですか?