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 BYsegons 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
HAVINGnomés té sentit quan s'utilitza ambGROUP BY. - Confondre WHERE i HAVING: Recorda que
WHEREs'utilitza per filtrar files abans de l'agregació, mentre queHAVINGs'utilitza per filtrar grups després de l'agregació.
Consells addicionals
- Utilitza
HAVINGper filtrar resultats basats en funcions d'agregació. - Combina
HAVINGambGROUP BYper 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
