Heim >Datenbank >MySQL-Tutorial >Wie behebe ich den MySQL-Fehler „Ungültige Verwendung der Gruppenfunktion' in einer Unterabfrage?

Wie behebe ich den MySQL-Fehler „Ungültige Verwendung der Gruppenfunktion' in einer Unterabfrage?

Barbara Streisand
Barbara StreisandOriginal
2025-01-11 22:38:46932Durchsuche

How to Fix MySQL's

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!

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