Mysql
 sql >> Baza danych >  >> RDS >> Mysql

mysql sortowanie i zestawienie rankingowe

Unikałbym korzystania z innego stołu. Wystarczy jedno zapytanie.

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)

To inteligentniejsza wersja, która uwzględnia krawaty

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zdobyć klucz podstawowy tabeli?

  2. Dołączanie istniejącej bazy danych do MySQL

  3. Uzyskiwanie dziennej liczby zdarzeń, które nie zdarzają się codziennie

  4. Dwie kolumny autoinkrementacji lub autoinkrementacja i ta sama wartość w innej kolumnie

  5. problem z utf8 w java