En la sección anterior vimos como resumir datos a través de algunas funciones de SQL de agregación. Por lo general estas funciones se usan o van de la mano con la agrupación de datos. En esta sección veremos como agrupar datos y usar las funciones de agregación para mostrar resultados.
Cómo agrupar los resultados de una consulta SQL.
SQL permite agrupar los resultados de una consulta por una o varias columnas o campos. Para eso usamos la cláusula GROUP BY de la sentencia SQL SELECT.
Cláusula SQL GROUP BY.
La cláusula GROUP BY agrupa los datos por una determinada columna o columnas. Veamos un ejemplo, para ello, abre la base de datos con la que hemos venido trabajando y abre el archivo sql también. Escribe y ejecuta la siguiente sentencia:
En la sentencia anterior estamos agrupando los resultados por la columna id_marca, el resultado da los distintos valores de la columna id_marca. Es decir que esta agrupando por los distintos valores de la columna id_marca. Esta consulta no tiene mucho valor práctico, solo nos muestra los distintos valores que contiene id_marca y nos dice que hay 250 filas o valores distintos de id_marca. Apliquemos ahora las funciones de agregación que vimos en la sección anterior:
La consulta anterior nos muestra el id_marca, el número de productos que hay de cada id_marca contando los valores nulos de id_marca y por último, cuántos productos de cada id_marca hay, sin tomar en cuenta los valores nulos de id_marca. Es por eso la diferencia en la primera fila la cual tiene el valor nulo (null) en id_marca, COUNT(*) regresa 1 porque cuenta todas las filas que contienen nulo (null) en la columna id_marca , mientras que COUNT(id_marca) cuenta los valores de id_marca ignorando los de valor nulo (null) lo que da como resultado cero.
No sólo podemos usar el campo por el que estamos agrupando en las funciones de agregación, podemos usar cualquiera de los otros campos. Escribe y ejecuta el siguiente ejemplo:
En la sentencia anterior, seguimos agrupando las filas por la columna id_marca, sin embargo, estamos aplicando las funciones de agregación al campo o columna id_categoria. ¿Que significan los resultados? Bueno, en el caso del grupo de id_marca con valor 5, el grupo cuenta con 28 filas con id_categoria no nulas, la id_categoria con el valor máximo o más alto de ese grupo es 781, la id_categoria con el valor menor de ese grupo es 3 y la suma de los valores de id_categoria de ese grupo da 14,083. Y así sucesivamente para cada grupo diferente de id_marca.
Las funciones de agregación no se tienen que aplicar todas a una misma columna, pueden aplicarse a distintas columnas:
También es posible agrupar por más de un campo:
En la sentencia anterior estamos agrupando por dos columnas: id_marca e id_categoria. Según las filas resultantes, existen 995 combinaciones diferentes de id_marca-id_categoria, es decir 995 grupos diferentes. La tercera columna de los resultados nos muestra cuantas filas o registros, que en este caso representan productos, hay en cada grupo distinto de id_marca-id_categoria. Por ejemplo, decimos que hay 6 productos o filas que tienen en su columna id_marca igual el valor 5 y el calor 3 en su columna id_categoria y así sucesivamente.
En la próxima sección vamos a combinar las cláusulas ORDER BY y GROUP BY para mostrar resultados más presentables. ¡Hasta la próxima!