À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!