Heim >Datenbank >MySQL-Tutorial >Warum erzeugt meine SQL-Abfrage den Fehler „Keine Einzelgruppen-Gruppenfunktion'?

Warum erzeugt meine SQL-Abfrage den Fehler „Keine Einzelgruppen-Gruppenfunktion'?

DDD
DDDOriginal
2024-12-23 16:30:17743Durchsuche

Why Does My SQL Query Produce a

Den Fehler „Keine Einzelgruppen-Gruppenfunktion“ in SQL verstehen

In SQL ist eine Einzelgruppen-Gruppenfunktion, wie z MAX(), SUM() oder AVG() wird auf eine Gruppe von Zeilen angewendet, die in den angegebenen Gruppierungsspalten dieselben Werte haben. Wenn Sie jedoch versuchen, einzelne Spaltenausdrücke zusammen mit einer Gruppenfunktion in die SELECT-Liste aufzunehmen und nicht alle dieser Ausdrücke in die GROUP BY-Klausel aufzunehmen, wird der Fehler „Keine Einzelgruppen-Gruppenfunktion“ auftreten.

Erläuterung des Problems

In der von Ihnen bereitgestellten Beispiel-SQL-Anweisung:

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN

die Abfrage versucht, den Maximalwert der Summe von TIME für jede eindeutige SSN zu berechnen und dann die diesem Maximalwert zugeordnete SSN zurückzugeben. Bei dieser Abfrage gibt es jedoch ein grundlegendes Problem:

  • Der Ausdruck MAX(SUM(TIME)) ist eine Einzelgruppen-Gruppenfunktion, die die maximale Summe von TIME für jede SSN berechnet. Per Definition bedeutet dies, dass es für jede SSN nur ein Ergebnis gibt.
  • Das Einschließen des einzelnen Spaltenausdrucks SSN in die SELECT-Liste verstößt gegen die Regel, dass alle in der SELECT-Liste enthaltenen einzelnen Spaltenausdrücke auch in die enthalten sein müssen GROUP BY-Klausel.

Lösung

Um diesen Fehler zu beheben, haben Sie drei Optionen:

  • Löschen Sie den einzelnen Spaltenausdruck (SSN) aus der SELECT-Liste: Dadurch erhalten Sie die maximale Summe von TIME ohne die zugehörige SSN.
  • Fügen Sie den einzelnen Spaltenausdruck (SSN) zur GROUP BY-Klausel hinzu: Dadurch werden die Ergebnisse sowohl nach SSN als auch nach ZEIT gruppiert, sodass Sie die abrufen können SSN, die der maximalen Summe von TIME zugeordnet ist.
  • Verwenden Sie eine Unterabfrage: Sie können eine Unterabfrage verwenden, um die maximale Summe von TIME abzurufen, und diesen Wert dann in einer separaten Abfrage verwenden, um die zugeordnete SSN zu identifizieren SSN.

Beispielabfrage mit Option 2

SELECT SSN, MAX(SUM(TIME))
FROM downloads
GROUP BY SSN, TIME

Diese Abfrage gruppiert die Ergebnisse sowohl nach SSN als auch nach ZEIT, sodass Sie für jede SSN die SSN abrufen können, die der maximalen Summe von ZEIT zugeordnet ist.

Das obige ist der detaillierte Inhalt vonWarum erzeugt meine SQL-Abfrage den Fehler „Keine Einzelgruppen-Gruppenfunktion'?. 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