HAVING

HAVING ist eine Bedingung, die auf aggregierte Werte angewendet werden kann. Die WHERE Bedingung kann zum Beispiel auf gruppierte Werte (GROUP BY) nicht angewendet werden, dafür muss man HAVING verwenden.

HAVING Syntax

 
SELECT spalten_name, aggregations_funktion(spalten_name)
FROM tabelle1 
GROUP BY spalten_name 
HAVING aggregations_funktion(spalten_name) operator wert 

HAVING = WHERE für gruppierte Daten

Im vorigen Teil haben wir alle Fragen selektiert und mittels GROUP BY noch die Anzahl der Antworten zu jeder Frage hinzugefügt:

SELECT questions.*, count(questions.id)  
FROM questions 
JOIN answers  
ON (questions.id = answers.question_id)  
GROUP BY questions.id 

Das wollen wir nun wieder machen, nur diesmal sollen nur die Fragen angezeigt werden, die mehr als 1 Antwort haben. Dazu nutzen wir HAVING, welches wir auf die aggregierten Werte anwenden (die Anzahl der Antworten sind die aggregierten Werte):

 
SELECT questions.*, count(questions.id) 
AS anzahl_antworten 
FROM questions 
JOIN answers  
ON (questions.id = answers.question_id)  
GROUP BY questions.id 
HAVING anzahl_antworten > 1 

Mit WHERE kann man nur einen bestimmten Bereich einschränken, sobald man Werte gruppiert und Einschränkungen anhand der Gruppierung machen möchte, benötigt man HAVING. Gerade für die weiteren SQL Funktionen, auf die wir im nächsten Teil eingehen werden, wird HAVING häufig benötigt.