Escriu per cercar…

Group by

La cláusula `group by` divide la tabla en grupos y te calcula un valor para cada grupo.

S'ensenya a
Bases de dadesTaulaDAMDAWDAW-BIOGestió de bases de dadesTaulaASIX

Introducción

Ya sabes calcular un número que resume toda una tabla.

count(*) te dice cuántas filas hay, y avg(score) te da la media de toda la columna.

Pero casi nunca quieres uno solo: quieres cuántas películas hay de cada clasificación, cuánto se ha gastado cada cliente, qué población tiene cada continente.

La cláusula group by divide la tabla en grupos para que puedas calcular esos números para cada uno.

Entorno de trabajo

Continúas con las dos bases de datos de las páginas anteriores:

  • sakila.db, el catálogo del videoclub de Where.
  • world.db, con la tabla population de Select.

También volverá a aparecer la tabla employees de Where.

Si has perdido alguna de las tres, las tienes todas en el proyecto de esta página.

group by

Pon la cláusula después del from y, si la hay, del where:

sql
select <columnes>
from <taula>
group by <columnes>;

SQLite evalúa el group by después del where y antes del select:

Empieza por la tabla film, con las mil películas del catálogo.

Cada película lleva una clasificación por edades en la columna rating:

sql
select rating, count(*) as pellicules
from film
group by rating;
ratingpellicules
G178
NC-17210
PG194
PG-13223
R195

Cinco filas.

group by rating ha repartido las mil películas en cinco pilas, una por clasificación, y count(*) ha contado las de cada pila.

178 + 210 + 194 + 223 + 195 son las mil de siempre: ninguna fila se ha perdido y ninguna se ha contado dos veces.

Con seis películas en vez de mil lo ves todo de un vistazo:

title rating rating count(*) BUGSY SONG ALI FOREVER DAZED PUNK ALONE TRIP CHILL LUCK ENCINO ELF 3 2 1 G PG G R PG G G PG R

Las tres películas clasificadas G van a parar al mismo grupo, y el grupo acaba siendo una sola fila del resultado.

Una fila por grupo

La tabla que te devuelve una consulta con group by ya no tiene una fila por película: tiene una por grupo.

Este es todo el cambio, y es lo que explica el resto de la página.

Por eso select * deja de tener sentido: la fila del resultado no es ninguna fila de film, y las mil film_id no caben en cinco filas.

Sin ninguna función de agregación, group by solo te dice qué grupos hay:

sql
select rating
from film
group by rating;

Estàs llegint una vista prèvia.

Inicia la sessió amb Google per llegir la pàgina sencera.

Inicia la sessió amb Google

Només et demanarem que acceptis les condicions del servei.