Sobes.tech
Junior

Was ist der Unterschied zwischen den Konstruktionen WHERE und HAVING in SQL?

sobes.tech KI

Antwort von AI

WHERE filtert Zeilen vor der Gruppierung (GROUP BY), beeinflusst, welche Zeilen an Aggregatfunktionen teilnehmen. HAVING filtert Gruppen nach der Gruppierung, basierend auf den Ergebnissen der Aggregatfunktionen.

Merkmal WHERE HAVING
Anwendung Auf einzelne Zeilen Auf Gruppen von Zeilen
Verarbeitungszeit Vor GROUP BY Nach GROUP BY
Verwendung Mit Feldern aus der Tabelle, aber ohne Aggregatfunktionen Mit Ergebnissen von Aggregatfunktionen oder Feldern aus GROUP BY

Beispiel für WHERE:

SELECT produkt_name, preis
FROM produkte
WHERE category_id = 1; -- Filtert Zeilen **vor** der Gruppierung (falls sie stattgefunden hätte)

Beispiel für HAVING:

SELECT category_id, COUNT(*) AS gesamt_produkte
FROM produkte
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtert Gruppen **nach** der Zählung der Gesamtzahl der Produkte

Beispiel für gemeinsame Verwendung:

SELECT category_id, AVG(preis) AS durchschnittspreis
FROM produkte
WHERE lagerbestand > 0 -- Filtert nur Produkte auf Lager **vor** der Gruppierung
GROUP BY category_id
HAVING AVG(preis) < 100; -- Filtert Gruppen mit einem durchschnittlichen Preis unter 100 **nach** der Gruppierung und Berechnung des Durchschnitts