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
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
- Utilitzar HAVING sense GROUP BY: La clàusula
HAVING
només té sentit quan s'utilitza ambGROUP BY
. - Confondre WHERE i HAVING: Recorda que
WHERE
s'utilitza per filtrar files abans de l'agregació, mentre queHAVING
s'utilitza per filtrar grups després de l'agregació.
Consells addicionals
- Utilitza
HAVING
per filtrar resultats basats en funcions d'agregació. - Combina
HAVING
ambGROUP 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
- Utilitzar LIKE per a coincidències de patrons
- Operadors IN i BETWEEN
- Valors NULL i IS NULL
- Agrupar dades amb GROUP BY
- Clàusula HAVING
Mòdul 5: Manipulació de dades
Mòdul 6: Funcions avançades de SQL
Mòdul 7: Subconsultes i consultes niades
- Introducció a les subconsultes
- Subconsultes correlacionades
- EXISTS i NOT EXISTS
- Utilitzar subconsultes en les clàusules SELECT, FROM i WHERE
Mòdul 8: Índexs i optimització del rendiment
- Comprendre els índexs
- Crear i gestionar índexs
- Tècniques d'optimització de consultes
- Analitzar el rendiment de les consultes
Mòdul 9: Transaccions i concurrència
- Introducció a les transaccions
- Propietats ACID
- Instruccions de control de transaccions
- Gestionar la concurrència
Mòdul 10: Temes avançats
Mòdul 11: SQL en la pràctica
- Casos d'ús del món real
- Millors pràctiques
- SQL per a l'anàlisi de dades
- SQL en el desenvolupament web