Debugging des MySQL-Fehlers „Ungültige Verwendung der Gruppenfunktion“
Problem:
Eine Abfrage zur Identifizierung von Teilen, die von mindestens zwei Lieferanten geliefert wurden, ergab den Fehler „Ungültige Verwendung der Gruppenfunktion“:
<code class="language-sql">SELECT c1.pid -- Select part ID (pid) FROM Catalog AS c1 -- From the Catalog table WHERE c1.pid IN ( -- Where pid is in the set: SELECT c2.pid -- Of pids FROM Catalog AS c2 -- From the Catalog table WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- Incorrect: COUNT in WHERE clause );</code>
Das Problem:
Der Fehler ist auf die falsche Platzierung der Funktion COUNT()
zurückzuführen. Die WHERE
-Klausel filtert einzelne Zeilen vor der Gruppierung, wodurch die Aggregatfunktion COUNT()
in diesem Kontext ungültig wird.
Lösung:
Der richtige Ansatz beinhaltet die Verwendung der HAVING
-Klausel, die nach Gruppierung und Aggregation filtert:
<code class="language-sql">SELECT c1.pid FROM Catalog AS c1 WHERE c1.pid IN ( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(c2.sid) >= 2 );</code>
Erklärung:
Die überarbeitete Abfrage gruppiert die Catalog
-Tabelle nach pid
mithilfe von GROUP BY c2.pid
. Die HAVING
-Klausel filtert dann diese Gruppen und behält nur diejenigen bei, bei denen die Anzahl der Lieferanten-IDs (sid
) größer oder gleich zwei ist. Dadurch werden Teile mit mindestens zwei Lieferanten korrekt identifiziert. Die äußere Abfrage wählt dann die pid
-Werte aus diesen gefilterten Gruppen aus.
Das obige ist der detaillierte Inhalt vonWie behebe ich den MySQL-Fehler „Ungültige Verwendung der Gruppenfunktion' in einer Unterabfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!