Guide for Cavallers i Dracs 5: Agrupant dades
Com abordar aquest problema
Amb GROUP BY obtens una fila de resultat per cada valor diferent d'una columna, i les funcions d'agregat (COUNT, SUM...) es calculen dins de cada grup. Les tres preguntes segueixen el mateix patró: "per cada X, mostra X i un resum". Cada pregunta té el seu propi quadre de text: escriu-hi una sola consulta SELECT (sense res més) per a cada pregunta.
La sintaxi que necessites
SELECT columna_de_grup, FUNCIO(columna)
FROM taula
GROUP BY columna_de_grup;
GROUP BY columna_de_grup: ajunta totes les files amb el mateix valor en aquesta columna.columna_de_grupalSELECT: perquè es vegi a quin grup correspon cada fila.FUNCIO(columna):COUNT(*)per comptar files del grup,SUM,AVG,MIN,MAXper resumir una columna dins del grup.
Pregunta per pregunta
Pregunta 1. "Per cada color": aquesta és la columna de grup. Després, compta quantes files té cada grup. Primer el color, després el comptatge.
Pregunta 2. La columna de grup és el resultat de la batalla, i el resum ja no és un comptatge sinó una suma d'una columna numèrica de la mateixa taula.
Pregunta 3. El mateix patró que la primera, però sobre l'altra taula i agrupant per una altra columna. Llegeix bé quina taula et demanen.
Un exemple semblant
Quants dracs ha matat cada cavaller (agrupant per la columna KilledBy):
SELECT KilledBy, COUNT(*)
FROM Dragons
GROUP BY KilledBy;
Per a cada títol de cavaller, la data de naixement més antiga:
SELECT Title, MIN(BirthDate)
FROM Knights
GROUP BY Title;
Paranys habituals:
- Si oblides el
GROUP BY, la funció d'agregat resumeix tota la taula i obtens una sola fila. - La columna que poses al
SELECT(fora de les funcions) ha de ser la mateixa delGROUP BY. COUNT(*)compta files del grup;SUM(columna)suma valors: no els confonguis.- Si una columna té valors
NULL, aquests formen el seu propi grup. El jutge no mira l'ordre de les files, però sí el nombre i l'ordre de columnes.