Funciones de agregación

En el artículo sobre la agrupación vimos que con la cláusula GROUP BY se pueden usar funciones de agregación. Vamos a verlas con más detalle 🐳.

Estructura general de una consulta con función de agregación

MySQL 8.4
SELECT { literal | funcion_agregacion | campo_agrupacion } [, ...]
FROM nombre_tabla
GROUP BY campo_agrupacion [, ...];
  • [ ]parte opcional
  • { a | b }una de las opciones
  • ...se puede repetir
literal

Un valor fijo, por ejemplo 'text' o 1. Es el mismo para todos los grupos.

funcion_agregacion

Una función que calcula un único valor a partir de todas las filas del grupo, por ejemplo AVG(price).

campo_agrupacion

La columna por la que las filas se dividen en grupos: las filas con el mismo valor acaban en el mismo grupo. Puedes indicar varias columnas separadas por comas.

nombre_tabla
La tabla cuyas filas se agrupan.

Por ejemplo, una consulta con la función de agregación AVG puede tener este aspecto:

MySQL 8.4
SELECT home_type, AVG(price) as avg_price FROM Rooms
GROUP BY home_type
home_typeavg_price
Private room89.4286
Entire home/apt148.6667
Shared room40

Descripción de las funciones de agregación

FunciónDescripción
SUM(campo_tabla)Devuelve la suma de los valores
AVG(campo_tabla)Devuelve el valor medio
COUNT(campo_tabla)Devuelve el número de registros
MIN(campo_tabla)Devuelve el valor mínimo
MAX(campo_tabla)Devuelve el valor máximo

Ejemplos

  • Calculemos cuántos alojamientos hay de cada tipo y ordenemos la lista resultante de forma descendente:

    MySQL 8.4
    SELECT home_type, COUNT(*) as amount FROM Rooms
    GROUP BY home_type
    ORDER BY amount DESC
    
    home_typeamount
    Private room28
    Entire home/apt21
    Shared room1
  • Para cada alojamiento, busquemos la fecha de salida más tardía (columna end_date):

    MySQL 8.4
    SELECT room_id, MAX(end_date) AS last_end_date FROM Reservations
    GROUP BY room_id
    
    room_idlast_end_date
    12019-02-04T12:00:00.000Z
    22020-03-23T09:00:00.000Z
    132020-04-21T10:00:00.000Z
    162019-06-24T10:00:00.000Z
    212020-02-29T10:00:00.000Z
    192020-05-02T10:00:00.000Z
    82020-01-21T12:00:00.000Z
    72019-09-17T10:00:00.000Z
    52020-05-15T10:00:00.000Z
    502019-11-25T11:00:00.000Z
    492020-06-11T10:00:00.000Z
    482019-11-10T10:00:00.000Z
    322020-01-18T13:00:00.000Z
    172019-11-05T09:00:00.000Z
    252020-04-22T09:00:00.000Z
    142020-02-12T10:00:00.000Z
    392019-12-09T10:00:00.000Z
    382020-03-23T10:00:00.000Z