AnteriorPosterior

8 - Valores agrupados

Por: Nacho Cabanes
Actualizado: 17-04-2019 10:54
Tiempo de lectura estimado: 4 min.

 

SQL y MySQL

8.1 Agrupando los resultados

Puede ocurrir que no nos interese un único valor agrupado para todos los datos (el total, la media, la cantidad de datos), sino el resultado para un grupo específico de datos. Por ejemplo: podemos desear saber no sólo la cantidad de clientes que hay registrados en nuestra base de datos, sino también la cantidad de clientes que viven en cada ciudad.

La forma de obtener subtotales es creando grupos con la orden "GROUP BY", y entonces pidiendo un valor agrupado (count, sum, avg, ...) para cada uno de esos grupos. Como limitación, sólo se podrán pedir como resultados los valores agrupados (como la cantidad o la media) y el criterio de agrupamiento.

Por ejemplo, en nuestra tabla "personas", podríamos saber cuantas personas aparecen de cada edad, con:

SELECT count(*), edad FROM personas GROUP BY edad;

que daría como resultado

+----------+------+
| count(*) | edad |
+----------+------+
|        1 |   22 |
|        1 |   23 |
|        1 |   25 |
+----------+------+

8.2 Filtrando los datos agrupados

Pero podemos llegar más allá: podemos no trabajar con todos los grupos posibles, sino sólo con los que cumplen alguna condición.

La condición que se aplica a los grupos no se indica con "where", sino con "having" (que se podría traducir como "los que tengan..."). Un ejemplo:

SELECT count(*), edad FROM personas GROUP BY edad HAVING edad > 24;

que mostraría

+----------+------+
| count(*) | edad |
+----------+------+
|        1 |   25 |
+----------+------+

8.3. Ejercicios propuestos

  • 8.1. Crea una base de datos "ejercicio8", con una única tabla "ordenadores". De cada ordenador se desea guardar un código (que será la clave primaria), una marca (no nula), un modelo y un año de lanzamiento (mira los datos de ejemplo para deducir los tipos de datos necesarios).
  • 8.2. Añade los ordenadores:
    • IBM5150, IBM, PC (5150), 1981
    • SPEC48, Sinclair, ZX Spectrum 48K, 1982
    • CPC464, Amstrad, CPC464, 1984
    • HB55, Sony, Hit-Bit 55 MSX, 1984
    • QL, Sinclair, QL, 1984
    • PPC640DD, Amstrad, PPC640 DD, 1988
  • 8.3. Muestra la cantidad total de ordenadores que tenemos registrados en nuestra base de datos.
  • 8.4. Muestra la cantidad de ordenadores de cada marca.
  • 8.5. Muestra la cantidad de ordenadores lanzados en 1984 o más tarde.
  • 8.6. Muestra la cantidad de ordenadores por cada marca, pero teniendo en cuenta sólo lanzados en 1984 o más tarde.
  • 8.7. Muestra la cantidad de ordenadores de cada marca, pero sólo para las marcas de las que tengamos 2 o más equipos.
  • 8.8. Como verás con más detalle en el apartado 10, la función SUBSTRING permite obtener una subcadena. Por ejemplo, SUBSTRING(modelo,1,2) permitiría saber las dos primeras letras del modelo de un ordenador. Usando esta función, deberás mostrar la cantidad de ordenadores que tenemos cuya marca empieza con una letra "S".
  • 8.9. Muestra la cantidad de ordenadores, agrupados por la inicial de su marca.
  • 8.10. Muestra el nombre (modelo) del ordenador más moderno del que tenemos constancia para cada marca.

3015 visitas desde el 17-04-2019

AnteriorPosterior