Inicio > MYSQL > Función rank de mysql

FUNCIÓN RANK DE MYSQL

MYSQL ME GUSTA

 

Hoy he descubierto la función rank 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], [{,...}]
)


Vamos a verlo con un ejemplo. Primero cargamos una tabla en nuestra base de datos

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);


Después de cargar la tabla se lanza la siguiente query:

SELECT
    sales_employee,
    fiscal_year,
    sale,
    RANK() OVER (PARTITION BY
                     fiscal_year
                 ORDER BY
                     sale DESC
                ) sales_rank
FROM
    sales;


Donde vemos que se usa la función rank y el resultado es:

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


¿Que significa el resultado?
  • 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.


Si vais cambiando los valores entendereis mejor el funcionamiento de la función. Sobre todo por el año 2017.


 


Comentarios

No hay comentarios en este artículo.