Guide for GroupBy 5: Agrupant dades
Com abordar aquest problema
Practiques GROUP BY: dividir una taula en grups segons el valor d'una columna i obtenir una fila de resultat per grup, amb un comptatge o una mitjana. La BD té tres taules d'empleats molt semblants (Employees, Employees2, Employees3): cada pregunta et diu quina has de fer servir. 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 BYajunta les files que tenen el mateix valor acolumna_de_grup.COUNT(*)compta les files de cada grup.AVG(columna),SUM,MIN,MAXresumeixen una columna dins de cada grup. Totes elles ignoren els valorsNULL.- Es pot agrupar per qualsevol columna, també per una de numèrica.
Pregunta per pregunta
Pregunta 1. La columna de grup és la del nom de pila, i el resum és un comptatge. Fixa't en la taula que et demanen (no és la primera).
Pregunta 2. El mateix patró, però ara la columna de grup és numèrica: cada sou diferent és un grup.
Pregunta 3. Ara canvia la taula i el resum és una mitjana. En aquesta taula alguns sous són NULL: no cal fer res especial, perquè la funció de mitjana ja els ignora: la mitjana d'un grup es calcula només amb els sous que hi ha.
Un exemple semblant
Per a cada cognom de la taula Employees, quants empleats el tenen:
SELECT LastName, COUNT(*)
FROM Employees
GROUP BY LastName;
Per a cada nom de Employees3, quantes files té el grup i quantes tenen el sou informat:
SELECT FirstName, COUNT(*), COUNT(Salary)
FROM Employees3
GROUP BY FirstName;
Paranys habituals:
- Les tres taules tenen les mateixes columnes: és molt fàcil consultar la taula equivocada.
COUNT(*)compta totes les files;COUNT(columna)iAVG(columna)se salten elsNULL.- No afegeixis un
WHERE ... IS NOT NULLsi no cal: podria fer desaparèixer grups sencers que el resultat sí que espera. - L'ordre de les columnes importa (primer la de grup, després el resum); l'ordre de les files no.