Volver a la lista de artículos Artículos
Lectura de 10 minutos

Una visión general de las funciones agregadas en SQL

Las funciones agregadas se utilizan habitualmente en SQL. Este artículo le guiará en su uso y le mostrará ejemplos de cómo funcionan.

Las funciones agregadas de SQL son una herramienta útil, especialmente para crear informes. No son difíciles de entender, especialmente si tienes algo de experiencia con Excel o programas similares. Probablemente hayas utilizado funciones de agregación como SUM o AVERAGE en una hoja de cálculo. Incluso si sólo las utilizas ocasionalmente, conocer las funciones de agregación puede ayudarte a entender mejor tus datos y a trabajar de forma más eficiente.

Todo lo que voy a cubrir en este artículo se explica con más detalle en nuestro curso Cómo crear informes básicos con SQL , donde también puedes practicar todas las funciones que aprendes aquí.

¿Qué son las funciones agregadas de SQL?

En SQL, las funciones agregadas realizan un cálculo en varias filas y devuelven un valor. Suelen utilizarse en la sentencia GROUP BY, pero también pueden utilizarse sin ella. Hay cinco funciones agregadas en SQL:

  • COUNT()
  • SUM()
  • AVG()
  • MIN()
  • MAX()

No voy a explicar aquí la sentencia GROUP BY. No es necesario, ya que tenemos un excelente artículo sobre el funcionamiento de GROUP BY. Si no estás familiarizado con GROUP BY, te sugiero que leas ese artículo y luego vuelvas aquí.

¿Qué hace cada función agregada?

Los nombres de las funciones anteriores se explican por sí mismos, al menos en mi opinión. Tal vez ya se haya dado cuenta de lo que hacen con sólo mirarlas. Sin embargo, una breve explicación no le hará daño:

FunctionExplanationIgnores NULL values
COUNT()Counts the number of rows in a table
SUM()Calculates the sum of column values
AVG()Calculates the average column value
MIN()Returns the minimum value from a set of values
MAX()Returns the maximum value from a set of values

La tabla de ventas

Utilizaré sólo una tabla para mostrarte cómo funcionan las funciones agregadas. Se llama sales y consta de los siguientes atributos:

  • id - La identificación del vendedor.
  • first_name - El nombre del vendedor.
  • last_name - El apellido del vendedor.
  • items_sold - El número de artículos vendidos.
  • product - El nombre del producto vendido.
  • date - La fecha de la venta.

Aquí hay varias filas para mostrarle cómo son los datos:

idfirst_namelast_nameitems_soldproductdate
1FrankCoyle42.00Product 12020-12-01
2FrankCoyle81.00Product 22020-12-01
3FrankCoyle14.00Product 32020-12-01
4NatashaHorvat69.00Product 12020-12-01
5NatashaHorvat44.00Product 22020-12-01

Observe que un vendedor puede aparecer en varias filas. Lo mismo ocurre con el producto y la fecha. Esto significa que un vendedor puede vender varios productos en varias fechas. También significa que en una fecha el mismo producto puede ser vendido por varios vendedores. Es importante recordar esto para los ejemplos que siguen.

Uso de COUNT()

Ya has aprendido que esta función se utiliza para contar las filas de una tabla. Así que, ¡vamos a contarlas!

COUNT() sin GROUP BY

En primer lugar, vamos a contar el número de filas de la tabla sales tabla. Este es el código:

SELECT COUNT (id) AS number_of_columns
FROM sales;

Este código utiliza la función COUNT() para contar el número de filas en la columna id. Si cuentas el número de filas en esta columna, también es el número total de filas en la tabla. Al ejecutar el código se obtienen los resultados de la columna number_of_columns. Hay 27 filas:

number_of_columns
27

Esperemos que no tengas problemas con esta simple sentencia SELECT. Si lo tienes, el curso SQL para principiantes puede ser beneficioso. Te enseñará los principios fundamentales de las bases de datos, la agregación y la consulta en una o varias tablas.

COUNT() con GROUP BY

Tu siguiente tarea es contar el número de productos diferentes vendidos por cada vendedor. Piensa en cómo se presentan los datos en la tabla sales. Teniendo en cuenta esto, tu código debería tener el siguiente aspecto:

SELECT	first_name,
		last_name,
		COUNT (DISTINCT product) AS number_of_products
FROM sales
GROUP BY first_name, last_name;

La consulta selecciona primero el nombre y el apellido del vendedor. A continuación, utiliza la función COUNT() para contar el número de productos, y el resultado se muestra en la columna number_of_products.

Observe que hay una cláusula DISTINCT. Esto significa que el código contará sólo los productos distintos, es decir, contará un producto específico sólo la primera vez que aparezca para un vendedor en particular. La cláusula DISTINCT es esencial en esta consulta porque el mismo producto puede aparecer varias veces en diferentes fechas. De lo contrario, la función COUNT() contaría un producto cada vez que aparezca en la tabla, lo que no es el resultado deseado.

Por último, la salida del código está agrupada por las columnas first_name y last_name porque quiero ver el resultado de cada vendedor. Este es el resultado:

first_namelast_namenumber_of_products
FrankCoyle3
NatashaHorvat3
YolandaMartinez3

Hay tres vendedores y cada uno de ellos vende tres productos diferentes.

La función COUNT() es interesante porque ignora los valores NULL. Debido a esta característica, debes tener cuidado al decidir qué quieres contar y cómo. Aquí hay un artículo que discute los matices de la función COUNT(). Puede ayudarte con esas decisiones.

Si quieres reforzar tus conocimientos sobre la sentencia GROUP BY, prueba nuestro curso Cómo crear informes básicos con SQL como juego de prácticas para GROUP BY. En este curso, se explica en detalle GROUP BY, lo que puede ser útil.

SUM() Sin GROUP BY

Después de contar filas, ahora es el momento de aprender a sumar todos los valores de una tabla. Esta vez, tu tarea es obtener el número total de artículos vendidos. ¿Tienes una idea de cómo hacerlo? No te apresures; tómate tu tiempo antes de echar un vistazo a mi solución.

Bien, confío en que te hayas tomado tu tiempo; aquí está el código:

SELECT SUM(items_sold) AS total_items_sold
FROM sales;

Esta sencilla consulta suma la columna items_sold de la tabla sales. El resultado aparecerá en la columna total_items_sold; aquí está:

total_items_sold
1275.00

SUM() con GROUP BY

Ahora que ya conoces la función SUM(), vamos a complicar un poco las cosas. ¿Qué tal si haces feliz a todo el mundo y calculas el número de artículos vendidos por producto? A continuación te explicamos cómo hacerlo:

SELECT	product,
		SUM(items_sold) AS items_sold_per_product
FROM sales
GROUP BY product;

Este código selecciona la columna producto de la tabla sales. Luego suma el número de artículos vendidos y muestra el resultado en la columna items_sold_per_product. Como su tarea es mostrar el número de artículos por producto, debe agrupar el resultado por producto. Voilà, el resultado es:

productitems_sold_per_product
Product 1442.00
Product 2639.00
Product 3194.00

Si te interesa comprobar el resultado, suma todos los valores anteriores y obtendrás 1.275. Esta suma es precisamente el resultado que has obtenido en el ejemplo anterior.

Ahora te mostraré lo que hace la función AVG().

AVG() sin GROUP BY

Como ya sabes, la función AVG() calcula el valor medio de un conjunto de valores. Para mostrarte cómo funciona, imaginemos que necesitas calcular el número medio de artículos vendidos. Aquí tienes una consulta que te dará el resultado correcto:

SELECT AVG(items_sold) AS avg_number_of_items_sold
FROM sales;

Este código es similar al del ejemplo de la función SUM(). Ahora utiliza la función AVG() para calcular los valores medios de la columna items_sold. El resultado del código aparecerá en la columna avg_number_of_items_sold.

El código pequeño devuelve una pequeña tabla:

avg_number_of_items_sold
47.222222

Tenga cuidado cuando utilice AVG() en una columna con valores de NULL. Esta función no tendrá en cuenta las filas que contengan los valores de NULL, por lo que el valor medio podría ser diferente al esperado. Déjame mostrarte lo que quiero decir. He modificado la tabla sales tabla para mostrarle cómo funciona:

idfirst_namelast_nameitems_soldproductdate
1FrankCoyle42Product 12020-12-01
2FrankCoyle81Product 22020-12-01
3FrankCoyle14Product 32020-12-01
4NatashaHorvatNULLProduct 12020-12-01

¿Cuál crees que será el valor medio de items_sold? ¿Su corazonada es que la función AVG() tratará el valor de NULL como cero? Algo así:

AVG = (42+81+14+0)/4 = 34.25

No, ¡tu corazonada es errónea! Ignorar los valores NULL significa que la fila se trata como si no existiera. Así:

AVG = (42+81+14)/3 = 45.67

AVG() con GROUP BY

Esta vez, necesitas un informe que muestre el promedio de artículos vendidos por fecha. ¿Cómo lo harías utilizando la función AVG() con GROUP BY? Seguramente lo has resuelto por ti mismo. En caso de que no lo hayas hecho, aquí está la solución:

SELECT	date,
		AVG(items_sold) AS avg_items_per_date
FROM sales
GROUP BY date;

Esta consulta selecciona la columna fecha de la tabla sales. De nuevo, se calcula la media de los artículos vendidos y el resultado se muestra en la columna avg_items_per_date. Usted quiere que el resultado se muestre por fecha, así que necesita agrupar el resultado por la columna date.

dateavg_items_per_date
2020-12-0147
2020-12-0259
2020-12-0335.666666

Tres funciones agregadas abajo, dos para ir. Ahora vamos a probar las funciones MIN() y MAX(). Casi puedes pensar en ellas como una sola función.

MIN() y MAX() sin GROUP BY

Las funciones MIN() y MAX() pueden ser vistas como los polos opuestos de una función. Trabajan de la misma manera, sólo que una función devuelve el valor mínimo y la otra el máximo en un conjunto de valores.

Para mostrarte cómo funcionan estas dos funciones, vamos a mostrar el número mínimo y máximo de artículos vendidos en un día. ¿Cómo lo harías? Como los datos de la tabla sales están en un nivel de fecha, es sencillo:

SELECT	MIN(items_sold) AS min_daily_sale,
		MAX(items_sold) AS max_daily_sale
FROM sales;

El código utiliza primero la función MIN() en la columna items_sold para encontrar el valor más pequeño. El resultado aparecerá en la columna min_daily_sale. La función MAX() encuentra el valor más grande, y el resultado aparece en la columna max_daily_sale. Ejecuta el código y este es el resultado que obtendrás:

min_daily_salemax_daily_sale
7.00122.00

MIN() y MAX() con GROUP BY

En el ejemplo anterior, no obtenemos nada más que los valores de venta diaria más pequeños y más grandes. No sabemos nada más que eso. Para animar este informe, vamos a mostrar el mínimo y el máximo de los artículos vendidos por vendedor y por producto. ¿Listo para ver la solución? Aquí la tienes:

SELECT	first_name,
		last_name,
		product,
		MIN(items_sold) AS min_sold_per_product,
		MAX(items_sold) AS max_sold_per_product
FROM sales
GROUP BY first_name, last_name, product;

Tu última consulta de hoy merece ser la más larga. Que no te asuste; no hay nada que no sepas ya. La consulta selecciona las columnas first_name, last_name, y el producto de la tabla ventas. Luego viene la función MIN(); se utiliza para calcular la menor cantidad de artículos vendidos por producto; el resultado se muestra en la columna min_sold_per_product. Luego está el mayor número de artículos vendidos por producto en la columna max_sold_per_product. Por último, hay que agrupar el resultado por el nombre y los apellidos de los vendedores y el nombre del producto. Aquí está el informe:

first_namelast_nameproductmin_sold_per_productmax_sold_per_product
FrankCoyleProduct 121.0066.00
FrankCoyleProduct 267.0099.00
FrankCoyleProduct 314.0025.00
NatashaHorvatProduct 112.0069.00
NatashaHorvatProduct 244.00122.00
NatashaHorvatProduct 324.0031.00
YolandaMartinezProduct 128.00112.00
YolandaMartinezProduct 230.0067.00
YolandaMartinezProduct 37.0033.00

Como te prometí, ¡esta es tu última tarea! Ahora lo mejor que puedes hacer es practicar las funciones agregadas de SQL por tu cuenta. Tal vez intente nuestro Ejercicios prácticos de SQL que tiene una buena sección sobre GROUP BY. O simplemente echa un vistazo a otro artículo, que da cinco ejemplos de GROUP BY; quizás sea exactamente lo que necesitas.

¿Encuentra útiles las funciones agregadas de SQL?

Leer este artículo no es todo lo que necesitas para dominar las funciones agregadas. Sin embargo, he intentado darte una visión práctica de las funciones agregadas de SQL: qué hacen y cómo lo hacen. También te he mostrado cómo utilizar las funciones agregadas con y sin GROUP BY. Ahora puede ser un buen momento para profundizar en GROUP BY, teniendo en cuenta lo útil que puede ser GROUP BY y sus extensiones en el mundo laboral.

No dudes en compartir tu experiencia con las funciones agregadas de SQL en la sección de comentarios.