Introducció

La clàusula HAVING en SQL s'utilitza per filtrar els resultats d'una consulta després d'haver aplicat una funció d'agregació com SUM(), COUNT(), AVG(), etc. És similar a la clàusula WHERE, però WHERE no pot ser utilitzada amb funcions d'agregació.

Sintaxi

SELECT columna1, funció_agregació(columna2)
FROM taula
GROUP BY columna1
HAVING condició;

Explicació de la sintaxi

  • SELECT columna1, funció_agregació(columna2): Selecciona les columnes i aplica una funció d'agregació.
  • FROM taula: Indica la taula de la qual es volen obtenir les dades.
  • GROUP BY columna1: Agrupa les files per la columna especificada.
  • HAVING condició: Filtra els grups creats per la clàusula GROUP BY segons la condició especificada.

Exemple pràctic

Suposem que tenim una taula vendes amb les següents columnes: producte, quantitat i preu.

CREATE TABLE vendes (
    producte VARCHAR(50),
    quantitat INT,
    preu DECIMAL(10, 2)
);

INSERT INTO vendes (producte, quantitat, preu) VALUES
('Producte A', 10, 20.00),
('Producte B', 5, 15.00),
('Producte A', 7, 20.00),
('Producte C', 3, 25.00),
('Producte B', 8, 15.00);

Consulta amb HAVING

Volem saber quins productes han tingut una quantitat total venuda superior a 15 unitats.

SELECT producte, SUM(quantitat) AS total_quantitat
FROM vendes
GROUP BY producte
HAVING SUM(quantitat) > 15;

Resultat

producte total_quantitat
Producte A 17
Producte B 13

En aquest cas, només el Producte A compleix la condició de tenir una quantitat total venuda superior a 15 unitats.

Exercicis pràctics

Exercici 1

Tenim una taula empleats amb les següents columnes: departament, salari.

CREATE TABLE empleats (
    departament VARCHAR(50),
    salari DECIMAL(10, 2)
);

INSERT INTO empleats (departament, salari) VALUES
('IT', 60000),
('HR', 50000),
('IT', 70000),
('Sales', 45000),
('Sales', 55000),
('HR', 60000);

Pregunta: Escriu una consulta per trobar els departaments on el salari mitjà és superior a 55000.

Solució

SELECT departament, AVG(salari) AS salari_mitja
FROM empleats
GROUP BY departament
HAVING AVG(salari) > 55000;

Resultat esperat

departament salari_mitja
IT 65000.00

Errors comuns

  1. Utilitzar HAVING sense GROUP BY: La clàusula HAVING només té sentit quan s'utilitza amb GROUP BY.
  2. Confondre WHERE i HAVING: Recorda que WHERE s'utilitza per filtrar files abans de l'agregació, mentre que HAVING s'utilitza per filtrar grups després de l'agregació.

Consells addicionals

  • Utilitza HAVING per filtrar resultats basats en funcions d'agregació.
  • Combina HAVING amb GROUP BY per obtenir resultats més significatius en les teves consultes.

Conclusió

La clàusula HAVING és una eina poderosa per filtrar resultats després d'aplicar funcions d'agregació. És essencial per a consultes que necessiten analitzar dades agrupades i aplicar condicions sobre aquestes agrupacions. Amb la pràctica, dominaràs l'ús de HAVING per crear consultes SQL més eficients i efectives.

Curs de SQL

Mòdul 1: Introducció a SQL

Mòdul 2: Consultes bàsiques de SQL

Mòdul 3: Treballar amb múltiples taules

Mòdul 4: Filtratge avançat de dades

Mòdul 5: Manipulació de dades

Mòdul 6: Funcions avançades de SQL

Mòdul 7: Subconsultes i consultes niades

Mòdul 8: Índexs i optimització del rendiment

Mòdul 9: Transaccions i concurrència

Mòdul 10: Temes avançats

Mòdul 11: SQL en la pràctica

Mòdul 12: Projecte final

© Copyright 2024. Tots els drets reservats