Artículo
· 31 ene, 2023 Lectura de 4 min

5 funciones muy útiles de SQL para llevar tus conocimientos de SQL al siguiente nivel

Hola Comunidad:

En este artículo, enumero 5 funciones bastánte útiles de SQL, con sus explicaciones y algunos ejemplos de consultas👇🏻

Las 5 funciones son:

  • COALESCE
  • RANK
  • DENSE_RANK
  • ROW_NUMBER
  • Función para obtener totales acumulados

¡Empezamos!

#COALESCE

La función COALESCE evalúa una lista de expresiones en orden de izquierda a derecha y devuelve el valor de la primera expresión non-NULL (no nula). Si todas las expresiones se corresponden con NULL (nulo), se devuelve NULL.

La siguiente sentencia devolverá el primer valor no nulo, que es 'intersystems'.

SELECT COALESCE(NULL, NULL, NULL,'intersystems', NULL,'sql')

Vamos a crear una tabla para ver otro ejemplo.

CREATE TABLE EXPENSES(
    TDATE     DATE NOT NULL,
    EXPENSE1   NUMBER NULL,
    EXPENSE2   NUMBER NULL,
    EXPENSE3   NUMBER NULL,
    TTYPE  CHAR(30) NULL)

Ahora vamos a insertar algunos valores ficticios para probar nuestra función

 INSERT INTO sqluser.expenses (tdate, expense1,expense2,expense3,ttype )  
  SELECT {d'2023-01-01'}, 500,400,NULL,'Present'
  UNION ALL
  SELECT {d'2023-01-01'}, NULL,50,30,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-01'}, NULL,NULL,30,'Clothes' 
  UNION ALL
  SELECT {d'2023-01-02'}, NULL,50,30 ,'Present'
  UNION ALL
  SELECT {d'2023-01-02'}, 300,500,NULL,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-02'}, NULL,400,NULL,'Clothes'   
  UNION ALL
  SELECT {d'2023-01-03'}, NULL,NULL,350 ,'Present'
  UNION ALL
  SELECT {d'2023-01-03'}, 500,NULL,NULL,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-04'}, 200,100,NULL,'Clothes'
  UNION ALL
  SELECT {d'2023-01-06'}, NULL,NULL,100,'SuperMarket'
  UNION ALL 
  SELECT {d'2023-01-06'}, NULL,100,NULL,'Clothes'  

Consultamos los datos

Ahora, al usar la función COALESCE recuperaremos el primer valor not NULL (no nulo) de las columnas expense1, expense2 y expense 3

SELECT TDATE,
COALESCE(EXPENSE1,EXPENSE2,EXPENSE3),
TTYPE
FROM sqluser.expenses ORDER BY 2   

Funciones #RANK vs DENSE_RANK vs ROW_NUMBER

  • RANK()— asigna un número entero de clasificación (ranking) a cada fila dentro del mismo "marco de ventana" (conjunto de datos obtenidos en la consulta), empezando en 1. Los números del ranking pueden incluir valores duplicados si varias filas contienen el mismo valor en el campo definido para la función de ventana.
  • ROW_NUMBER() — asigna un número entero único y secuencial a cada fila dentro del mismo "marco de ventana", empezando en 1. Si varias filas contienen el mismo valor para el campo definido en la función de ventana, a cada fila se le asigna un número entero único y secuencial.
  • DENSE_RANK() no se salta ningún valor en el ranking si hay valores duplicados.

En SQL, hay varias formas de asignar un ranking a una fila, que analizaremos en detalle con un ejemplo. Consideramos de nuevo el mismo ejemplo anterior, pero ahora queremos saber cuál es el gasto mayor.

Queremos saber donde gasto más dinero y para ello tenemos diferentes formas de hacerlo. Podemos usar las tres funciones: ROW_NUMBER() , RANK() y DENSE_RANK() . Ordenaremos la tabla anterior usando las tres funciones y veremos las diferencias entre ellas usando la siguiente consulta:

Esta es nuestra consulta:

La principal diferencia entre las tres funciones es cómo tratan los empates. Vamos a explicar las diferencias un poco más en detalle:

  • ROW_NUMBER()devuelve un número único para cada fila empezando en el 1. Cuando hay empates, asigna un número de forma arbitraria si no se define un segundo criterio.
  • RANK()devuelve un número único para cada fila empezando en el 1, excepto cuando hay empates. Entonces asignará el mismo número. Y se saltará un valor en el ranking tras el puesto del ranking duplicado.
  • DENSE_RANK() asigna el mismo valor del ranking a los valores duplicados, pero no se salta ningún puesto del ranking.

#Calculando Totales Acumulados (Running Totals)

La función running total (total acumulado) es probablemente una de las funciones de ventana más útiles, especialmente cuando se quiere visualizar el crecimiento. Al usar una función de ventana con SUM(), se puede calcular una agregación acumulativa.

Para hacerlo, solo necesitamos sumar una variable usando el agregador SUM() pero ordenar la función usando una columna TDATE. 

Esta sería la consulta:

Como se puede ver en la tabla, ahora tenemos la suma acumulada de la cantidad de dinero gastada, según pasan los días.
 

Conclusión

SQL es excelente. Las funciones utilizadas en este artículo pueden ser útiles para el análisis de datos, la ciencia de datos y cualquier otro campo relacionado con los datos.

Por eso es importante seguir actualizando y mejorando los conocimientos de SQL.

¡Espero que os resulte útil!
 

Comentarios (2)2
Inicie sesión o regístrese para continuar