Heim >Datenbank >MySQL-Tutorial >Kann HAVING in SQL ohne eine GROUP BY-Klausel verwendet werden?

Kann HAVING in SQL ohne eine GROUP BY-Klausel verwendet werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-29 18:12:101010Durchsuche

Can HAVING be Used in SQL Without a GROUP BY Clause?

Kann eine HAVING-Klausel ohne eine GROUP BY-Klausel verwendet werden?

Der SQL-Standard legt spezifische Kriterien für die Verwendung der HAVING-Klausel fest, darunter: Verweisen auf Spalten, die funktional von der GROUP BY-Klausel oder äußeren Verweisen abhängig sind. Die bereitgestellte Abfrage wirft jedoch die Frage auf, ob es möglich ist, HAVING ohne GROUP BY zu verwenden.

Standard-SQL-Spezifikationen

Nach dem Standard eine HAVING-Klausel ohne Eine GROUP BY-Klausel ist nicht ausdrücklich verboten. Die Abfrage weist jedoch ein fragwürdiges Verhalten auf:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)

Diese Abfrage verwendet eine Aggregatfunktion (MAX) in der HAVING-Klausel, gibt jedoch nicht an, welche bestimmte Zeile ausgewählt werden soll. Daher ist sein Verhalten nicht streng durch den Standard definiert.

MySQL-Implementierung

MySQL interpretiert diese Abfrage so, als ob es eine implizite GROUP BY-Klausel gäbe, und wählt nur die Zeile aus mit dem maximalen NumberOfPages-Wert. Dieses Verhalten entspricht nicht dem Standard.

Grund für die Nichteinhaltung des Standards

Der Standard verlangt, dass die HAVING-Klausel auf Gruppen von Zeilen angewendet wird, die durch die GROUP BY-Klausel definiert werden. Sein Zweck besteht darin, Gruppen basierend auf aggregierten Werten herauszufiltern. Die Verwendung von HAVING ohne GROUP BY würde das Filtern nach beliebigen Bedingungen ermöglichen und möglicherweise zu unerwarteten Ergebnissen führen.

Gültige Standard-SQL-Abfrage

Eine gültige Standard-SQL-Abfrage, die HAVING ohne GROUP BY verwendet wäre:

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);

Diese Abfrage prüft, ob der minimale NumberOfPages-Wert kleiner als der maximale Wert ist, und gibt eine einzelne Zeile mit zurück das Ergebnis 'T', wenn wahr, und eine leere Menge, wenn falsch. Dieses Verhalten steht im Einklang mit der Anforderung des Standards, dass HAVING für Aggregatfunktionen gilt, die auf der gesamten Tabelle ausgeführt werden.

Das obige ist der detaillierte Inhalt vonKann HAVING in SQL ohne eine GROUP BY-Klausel verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn