RANK EN MYSQL: CÓMO USAR LA FUNCIÓN CON EJEMPLOS
Hoy he descubierto la función rank de mysql, y se engloba dentro de las funciones ventana de mysql. La función RANK asigna un rango a cada fila dentro de la partición de un conjunto de resultados. El rango de una fila se especifica en uno más el número de rangos que le preceden.La sintaxis de RANK es:
RANK() OVER (
PARTITION BY [{,...}]
ORDER BY [ASC|DESC], [{,...}]
)
CREATE TABLE IF NOT EXISTS sales(
sales_employee VARCHAR(50) NOT NULL,
fiscal_year INT NOT NULL,
sale DECIMAL(14,2) NOT NULL,
PRIMARY KEY(sales_employee,fiscal_year)
);
INSERT INTO sales(sales_employee,fiscal_year,sale)
VALUES('Bob',2016,100),
('Bob',2017,150),
('Bob',2018,200),
('Alice',2016,150),
('Alice',2017,100),
('Alice',2018,200),
('John',2016,200),
('John',2017,150),
('John',2018,250);
SELECT
sales_employee,
fiscal_year,
sale,
RANK() OVER (PARTITION BY
fiscal_year
ORDER BY
sale DESC
) sales_rank
FROM
sales;
sales_employee fiscal_year sale sales_rank
John 2016 200.00 1
Alice 2016 150.00 2
Bob 2016 100.00 3
Bob 2017 150.00 1
John 2017 150.00 1
Alice 2017 100.00 3
John 2018 250.00 1
Bob 2018 200.00 2
Alice 2018 200.00 2
- Año 2016: John es el número 1 porque vendió 200 luego viene Alice que vendió 150 y luego Bob que vendió 100.
- Año 2017: Bob y John están en el número 1 porque vendieron 150 y Alice que vendió 100 está la 3.
- Año 2018: John está en el número 1 porque vendió 250 y Bob y Alice que vendieron 200 están la 2.