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.


Deprecated: Directive 'allow_url_include' is deprecated in Unknown on line 0
vConsole
19:27:26
Uncaught TypeError: Cannot read properties of null (reading 'style')
/andere/index.php?name=having.php:5446:53
19:27:26
Uncaught SyntaxError: Unexpected token '<'
/js/index.php?js=3.2.1-jquery.min.js:4:22481
19:27:26
Uncaught SyntaxError: Unexpected token '<'
/js/index.php?js=MooTools.min.js:5:5095
19:27:26
Uncaught SyntaxError: Unexpected token '<'
/js/index.php?js=EnlighterJS.min.js:3:17773
19:27:26
Uncaught TypeError: window.addEvent is not a function
/andere/index.php?name=having.php:2788:8
19:27:26
Uncaught SyntaxError: Unexpected token '<'
/js/index.php?js=pace.js:896:26
19:27:26
Uncaught SyntaxError: Unexpected token '<'
/js/index.php?js=cookieconsent.min.js:1:20809
19:27:26
Uncaught SyntaxError: Unexpected token '<'
/js/alljs.php:408:2
19:27:26
WeChatLib: 0 (xxxx.xx.xx)
19:27:27
System: Unknown
19:27:27
Protocol: HTTPS
19:27:27
UA: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
19:27:27
navigationStart: 1744831645418
19:27:27
navigation: 3ms
19:27:27
dns: 52ms
19:27:27
tcp (ssl): 228ms (117ms)
19:27:27
request: 529ms
19:27:27
response: 1ms
19:27:27
domComplete (domLoaded): 1088ms (659ms)
19:27:27
loadEvent: 12ms
19:27:27
total (DOM): 1915ms (1903ms)