Hola lectores,
¡Buen día!
Recientemente tuve la necesidad de crear una clasificación en MySQL similar a ROW_NUMBER() de SQL Server. Desafortunadamente, Oracle aún no ha implementado esta característica tan útil, pero como todo funciona, les mostraré cómo podemos implementarla.
Una forma muy sencilla de hacer esto es crear una tabla e incluir un campo de incremento automático, como el siguiente ejemplo:
DROP TABLE IF EXISTS `teste`;
CREATE TABLE `teste`(
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(50) NOT NULL,
`idade` INT(11) UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
);
De esta forma, cada línea tendrá su propio ID incremental, que podrá utilizarse como Ranking.
El problema es cuando necesitamos crear consultas un poco más complejas usando combinaciones y filtros y necesitamos crear una clasificación en esa consulta. ¿Podemos crear una tabla y almacenar el resultado de esta consulta en la tabla mediante incremento automático?
Sí, pero es una opción muy laboriosa, especialmente si se devuelven muchas columnas en la consulta.
Completar datos para que nuestra tabla siga la siguiente estructura:
id nome idade
------ ---------------- --------
1 João Zebedeu 27
2 Pedro 32
3 Mateus 15
4 Judas Tadeu 29
5 André 64
6 Tomé 60
7 Filipe 25
8 Bartolomeu 47
9 Tiago 28
10 Tiago 33
11 Judas Iscariotes 666
12 Simão 39
INSERT INTO `teste` (nome, idade)
VALUES('João Zebedeu', 27),
('Pedro', 32),
('Mateus', 15),
('Judas Tadeu', 29),
('André', 64),
('Tomé', 60),
('Filipe', 25),
('Bartolomeu', 47),
('Tiago', 28),
('Tiago', 33),
('Judas Iscariotes', 666),
('Simão', 39);
Podemos satisfacer nuestras necesidades creando la consulta de la siguiente manera:
SELECT
id,
nome,
idade,
@curRank := @curRank + 1 AS rank
FROM
teste p,
(SELECT @curRank := 0) r
ORDER BY
idade;
Y esta es la devolución:
id nome idade rank
------ ---------------- ------ --------
3 Mateus 15 1
7 Filipe 25 2
1 João Zebedeu 27 3
9 Tiago 28 4
4 Judas Tadeu 29 5
2 Pedro 32 6
10 Tiago 33 7
12 Simão 39 8
8 Bartolomeu 47 9
6 Tomé 60 10
5 André 64 11
11 Judas Iscariotes 666 12
¡Exactamente lo que necesitaba!
¡Hasta la próxima!
Comentários (0)
Carregando comentários…