Guide for Miniwind 8: JOINs amb filtres i agrupacions


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

Com abordar aquest problema

Combines JOIN i GROUP BY: primer uneixes dues taules per tenir la informació junta, i després agrupes les files resultants per calcular un total o un recompte per a cada grup (per empleat, per client, per categoria...).

La sintaxi que necessites

SELECT a.nom, COUNT(*), SUM(b.import)
FROM taula_a a
INNER JOIN taula_b b ON b.a_id = a.id
WHERE condicio_opcional
GROUP BY a.id, a.nom;
  • L'ordre en què s'executa és: FROM + JOIN → WHERE → GROUP BY → funcions d'agregació (COUNT, SUM...) → SELECT.
  • És bona idea agrupar per la clau (a.id) i pel nom: dos elements diferents podrien tenir el mateix nom, i si agrupes només pel nom els barrejaries.
  • Amb INNER JOIN, els elements sense cap fila relacionada desapareixen, cosa que aquí és precisament el que demanen ("només els que en tinguin").

Pregunta per pregunta

Pregunta 1. Uneix empleats i comandes per la relació "qui l'ha gestionada", agrupa per empleat i compta. Dues columnes: cognom i recompte.

Pregunta 2. La mateixa estructura, però ara la relació és entre clients i comandes, i en lloc de comptar cal sumar una columna de les comandes. Recorda agrupar per client (la clau), no només pel nom.

Pregunta 3. La categoria no és una taula: és una columna de text dels productes. Cal unir productes amb les línies de comanda, agrupar per aquesta columna i sumar la quantitat de les línies.

Un exemple semblant

Nombre de comandes en cada estat:

SELECT s.status_name, COUNT(*)
FROM orders_status s
INNER JOIN orders o ON o.status_id = s.id
GROUP BY s.id, s.status_name;

Nombre de línies de comanda de cada producte, comptant només les línies amb quantitat de 50 o més:

SELECT p.product_name, COUNT(*)
FROM products p
INNER JOIN order_details d ON d.product_id = p.id
WHERE d.quantity >= 50
GROUP BY p.id, p.product_name;

Paranys habituals:

  • Oblidar el GROUP BY: amb una funció d'agregació, SQLite retorna una sola fila per a tota la taula.
  • Unir per la clau equivocada (per exemple, igualar o.id amb e.id): els recomptes surten però no tenen sentit.
  • Sumar una columna de la taula equivocada: pensa a quina taula viu el valor que vols totalitzar.
  • El jutge no mira els noms de les columnes ni l'ordre de les files, però sí el nombre de columnes i el seu ordre: no afegeixis columnes "de regal" (com l'identificador) si no te les demanen.

Tornar al problema