Unidad Didáctica 8. Consultas resumen

José Juan Sánchez Hernández

IES Celia Viñas (Almería) - 2018/2019

2 Consultas resumen

Vamos a recordar la sintaxis para realizar una consulta con la sentencia SELECT en MySQL:

SELECT [DISTINCT] select_expr [, select_expr ...]
[FROM table_references]
[WHERE where_condition]
[GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position} [ASC | DESC], ...]
[LIMIT {[offset,] row_COUNT | row_COUNT OFFSET offset}]

Es muy importante conocer en qué orden se ejecuta cada una de las cláusulas que forman la sentencia SELECT. El orden de ejecución es el siguiente:

En esta unidad vamos a trabajar con dos nuevas cláusulas GROUP BY y HAVING.

2.1 Funciones de agregación

Estas funciones realizan una operación específica sobre todas las filas de un grupo.

Las funciones de agregación más comunes son:

Función Descripción
MAX(expr) Valor máximo del grupo
MIN(expr) Valor mínimo del grupo
AVG(expr) Valor medio del grupo
SUM(expr) Suma de todos los valores del grupo
COUNT(*) Número de filas que tiene el resultado de la consulta
COUNT(columna) Número de valores no nulos que hay en esa columna

En la documentación oficial de MySQL puede encontrar una lista completa de todas las funciones de agregación que se pueden usar.

Importante: Las funciones de agregación sólo se pueden usar en las cláusulas SELECT Y HAVING.

2.1.1 Diferencia entre COUNT(*) y COUNT(columna)

Importante: Tenga en cuenta la diferencia que existe entre las funciones COUNT(*) y COUNT(columna), ya que devolverán resultados diferentes cuando haya valores nulos en la columna que estamos usando en la función.

Ejemplos:

Supongamos que tenemos los siguientes valores en la tabla alumno:

id nombre apellido1 apellido2 fecha_nacimiento es_repetidor teléfono
1 María Sánchez Pérez 1990/12/01 no NULL
2 Juan Sáez Vega 1998/04/02 no 618253876
3 Pepe Ramírez Gea 1988/01/03 no NULL
4 Lucía López Ruiz 1993/06/13 678516294

La consulta:

SELECT COUNT(teléfono)
FROM alumno;

devolverá:

COUNT(teléfono)
2

mientras que la consulta:

SELECT COUNT(*)
FROM alumno;
COUNT(*)
4

2.1.2 Contar valores distintos COUNT(DISTINCT columna)

Supongamos que tenemos los siguientes valores en la tabla producto:

id nombre precio código_fabricante
1 Disco duro SATA3 1TB 86 5
2 Memoria RAM DDR4 8GB 120 4
3 Disco SSD 1 TB 150 5
4 GeForce GTX 1050Ti 185 5

Y nos piden calcular el número de valores distintos de código de fabricante que aparecen en la tabla producto.

SELECT COUNT(DISTINCT código_fabricante)
FROM producto;

Esta consulta devolverá:

COUNT(DISTINCT código_fabricante)
2

2.2 Agrupamiento de filas (GROUP BY)

La cláusula GROUP BY nos permite crear grupos de filas que tienen los mismos valores en las columnas por las que se desea agrupar.

Imagen: Imagen extraída del libro SQL: The Complete Reference de James R. Groff y otros.

En la documentación oficial de MySQL puede consultar la lista de modificadores que puede utilizar con GROUP BY.

2.3 Condición de agrupamiento (HAVING)

La cláusula HAVING nos permite crear filtros sobre los grupos de filas que tienen los mismos valores en las columnas por las que se desea agrupar.

Imagen: Imagen extraída del libro SQL: The Complete Reference de James R. Groff y otros.

2.4 Ejemplo de agrupamiento de filas (GROUP BY) con condición de agrupamiento (HAVING)