Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como classificar a partição no MySQL


Às vezes você pode precisar classificar sobre partição no MySQL ou fazer classificação agrupada no MySQL. Veremos como classificar a partição usando a função de classificação do MySQL. Você pode usar essa abordagem para classificar cada grupo/partição em uma tabela separadamente. No entanto, observe que esta função está disponível apenas no MySQL 8.0.



Classificação do MySQL sobre partição


Usaremos a função MySQL RANK() para classificar dentro do grupo. Aqui está a sintaxe da função MySQL RANK.
RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)

A função de classificação atribui uma classificação a cada linha dentro de uma partição, de modo que a classificação de cada linha seja uma a mais do que o número total de linhas que foram classificadas nessa partição.

Na sintaxe acima, a cláusula PARTITION BY dividirá as linhas em partições. Você pode particionar uma tabela com base em um ou mais valores de coluna. Se você não quiser particionar a tabela, você pode simplesmente omitir a cláusula PARTITION BY completamente.


Bônus de leitura:Como alterar o fuso horário do MySQL na consulta

A função Rank calculará a classificação dentro de cada partição/grupo e reinicializará o número da classificação ao iniciar com uma nova partição.

A cláusula ORDER BY classifica as linhas dentro de cada partição com base nos valores em uma ou mais colunas.


Bônus de leitura:MySQL Comparar bancos de dados

Digamos que você tenha a seguinte tabela.
mysql> create table for_rank(id int, month  varchar(10),amount  int);

mysql> insert into for_rank(id, month, amount)
     values(1,'Jan',450),
     (2,'Jan',350),
     (3,'Jan',250),
     (4,'Feb',150),
     (5,'Feb',450),
     (6,'Feb',500),
     (7,'Mar',350),
     (8,'Mar',450),
     (9,'Mar',250),
     (10,'Mar',150);

mysql> select * from for_rank;
+------+-------+--------+
| id   | month | amount |
+------+-------+--------+
|    1 | Jan   |    450 |
|    2 | Jan   |    350 |
|    3 | Jan   |    250 |
|    4 | Feb   |    150 |
|    5 | Feb   |    450 |
|    6 | Feb   |    500 |
|    7 | Mar   |    350 |
|    8 | Mar   |    450 |
|    9 | Mar   |    250 |
|   10 | Mar   |    150 |
+------+-------+--------+


Bônus de leitura:MySQL mostra índices em bancos de dados

Aqui está a consulta para atribuir classificação a cada linha da tabela, sem usar nenhuma cláusula PARTITION BY.
SELECT
     id, month, amount, RANK() OVER (
     PARTITION BY Month
     ORDER BY amount desc
     ) my_rank
FROM for_rank;

+------+-------+--------+--------+
| id   | month | amount |  rank  |
+------+-------+--------+--------+
|    6 | Feb   |    500 |     1  |
|    5 | Feb   |    450 |     2  |
|    4 | Feb   |    150 |     3  |
|    1 | Jan   |    450 |     1  |
|    2 | Jan   |    350 |     2  |
|    3 | Jan   |    250 |     3  |
|    8 | Mar   |    450 |     1  |
|    7 | Mar   |    350 |     2  |
|    9 | Mar   |    250 |     3  |
|   10 | Mar   |    150 |     4  |
+------+-------+--------+--------+



Na consulta acima, particionamos a tabela por nome do mês e classificamos cada linha dentro de cada partição em ordem decrescente de valor.

Espero que agora você possa usar facilmente a função MySQL Rank para classificar partições e grupos.

O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!