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.

hier geht's weiter...



Kommentare


Folgender SQL-Befehl ist nach meinem Verständniss nicht in Ordnung:

1 SELECT questions.*, count(questions.id) AS anzahl_antworten

2 FROM questions JOIN answers

3 ON (questions.id = answers.question_id)

4 GROUP BY questions.id

5 HAVING anzahl_antworten > 1

Grund: Die Spaltenvariable 'anzahl_antworten' nach der HAVING-CLAUSE ist nicht in den Tabellen der FROM-Liste enthalten. Die Ergebnisstabelle ist zu diesem Zeitpunkt noch gar nicht generiert, um sich auf die Spalte 'anzahl_antworten' beziehen zu können.

Bitte korrigiert mich falls ich da falsch liege, jedoch funktioniert der o.g SQL-Befehl an der Apache Derby DB nicht.

Jedoch funktioniert es so: … HAVING count(questions.id)> 1;

Gruß

Jack

Kommentar schreiben

Kommentar

Hilfe:

<strong>fettgedruckt</strong> => fettgedruckt

<em>kursiv</em> => kursiv

<a href="http://wordpress.lernenhoch2.de">Link</a> => Link

[code]<?php echo 'hello world'; ?>[/code]

*

Feedback Formular