mysql sorting and ranking statement

前端 未结 3 858
臣服心动
臣服心动 2021-01-16 16:49

I need some help in mysql statement Ive table1 with 7 column and table 2 with 8 column the extra column named ranking , my statement should be like select all from table 1

3条回答
  •  离开以前
    2021-01-16 17:32

    I would avoid to use another table. A single query suffices.

    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','ffffd',30),
    ('e','eee',20),
    ('f','fff',45),
    ('g','ggg',20);
    
    select @r:=@r+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        | ffffd   |     30 |
    |    5 | e        | eee   |     20 |
    |    6 | g        | ggg   |     20 |
    |    7 | a        | aaa   |     10 |
    +------+----------+-------+--------+
    7 rows in set (0.00 sec)
    

    This is a smarter version that considers ties

    select @r:=@r + 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        | ffffd   |        3 |     30 |
    |    5 | e        | eee   |        5 |     20 |
    |    6 | g        | ggg   |        5 |     20 |
    |    7 | a        | aaa   |        7 |     10 |
    +------+----------+-------+----------+--------+
    7 rows in set (0.00 sec)
    

提交回复
热议问题