Guide for Cavallers i Dracs 5: Agrupant dades


Això és una guia per ajudar-te a començar amb aquest problema — no és la solució.

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_grup al SELECT: perquè es vegi a quin grup correspon cada fila.
  • FUNCIO(columna): COUNT(*) per comptar files del grup, SUM, AVG, MIN, MAX per 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 del GROUP 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.

Tornar al problema