Escriu per cercar…

Group by

La clàusula `group by` parteix la taula en grups i et calcula un valor per a cada grup.

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

Introducció

Ja saps calcular un número que resumeix tota una taula.

count(*) et diu quantes files hi ha, i avg(score) et dóna la mitjana de tota la columna.

Però gairebé mai en vols un de sol: vols quantes pel·lícules hi ha de cada classificació, quant s’ha gastat cada client, quina població té cada continent.

La clàusula group by parteix la taula en grups perquè puguis calcular aquests números per a cadascun.

Entorn de treball

Continues amb les dues bases de dades de les pàgines anteriors:

  • sakila.db, el catàleg del videoclub de Where.
  • world.db, amb la taula population de Select.

També hi tornarà a sortir la taula employees de Where.

Si has perdut cap dels tres, els tens tots al projecte d’aquesta pàgina.

group by

Posa la clàusula després del from i, si n’hi ha, del where:

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

SQLite avalua el group by després del where i abans del select:

Comença per la taula film, amb les mil pel·lícules del catàleg.

Cada pel·lícula porta una classificació per edats a la columna rating:

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

Cinc files.

group by rating ha repartit les mil pel·lícules en cinc piles, una per classificació, i count(*) n’ha comptat les de cada pila.

178 + 210 + 194 + 223 + 195 són les mil de sempre: cap fila s’ha perdut i cap no s’ha comptat dues vegades.

Amb sis pel·lícules en comptes de mil ho veus tot d’un cop:

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

Les tres pel·lícules classificades G van a parar al mateix grup, i el grup acaba sent una sola fila del resultat.

Una fila per grup

La taula que et retorna una consulta amb group by ja no té una fila per pel·lícula: en té una per grup.

Aquest és tot el canvi, i és el que explica la resta de la pàgina.

Per això select * deixa de tenir sentit: la fila del resultat no és cap fila de film, i les mil film_id no caben en cinc files.

Sense cap funció d’agregació, group by només et diu quins grups hi ha:

sql
select rating
from film
group by rating;

Estàs llegint una vista prèvia.

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

Inicia sessió amb Google

Amb qualsevol compte de Google. Només et demanarem que acceptis les condicions del servei.