Heim >Datenbank >MySQL-Tutorial >Wie funktioniert die GROUP BY-Klausel von SQL ohne Aggregatfunktionen?

Wie funktioniert die GROUP BY-Klausel von SQL ohne Aggregatfunktionen?

DDD
DDDOriginal
2024-12-25 22:29:09996Durchsuche

How Does SQL's GROUP BY Clause Work Without Aggregate Functions?

GROUP BY ohne Aggregatfunktionen verstehen

In SQL wird die GROUP BY-Anweisung verwendet, um Zeilen in einer Tabelle basierend auf angegebenen Spalten zu gruppieren. Wenn Sie GROUP BY ohne Aggregatfunktionen verwenden, ist es wichtig zu verstehen, wie es funktioniert und welche Bedingungen es erfordert.

Betrachten Sie das folgende Beispiel:

SELECT ename, sal
FROM emp
GROUP BY ename, sal;

Diese Abfrage gibt keine Zeilen zurück, weil sie verstößt gegen die Regeln von GROUP BY ohne Aggregatfunktionen:

  • Anzahl der Spalten in der SELECT-Liste: Die Die Anzahl der Spalten in der SELECT-Liste muss der Anzahl der Spalten in der GROUP BY-Klausel entsprechen.

In diesem Fall hat die SELECT-Liste zwei Spalten (ename, sal), die GROUP BY-Klausel jedoch drei (Ename, Sal, Sal). Um dies zu beheben, entfernen Sie eine Sal-Spalte aus der GROUP BY-Klausel:

SELECT ename, sal
FROM emp
GROUP BY ename;
  • Nicht-GROUP BY-Spalten in der SELECT-Liste:Nicht-GROUP BY-Spalten können nur eingeschlossen werden in der SELECT-Liste, wenn sie Konstanten sind oder als Argumente für Aggregatfunktionen erscheinen.

Wenn Sie sal in die SELECT-Liste aufnehmen, Sie wird zu einer Nicht-GROUP BY-Spalte, da sie nicht in der GROUP BY-Klausel enthalten ist. Da es sich nicht um eine Aggregatfunktion handelt, löst sie den ORA-00979-Fehler aus.

Um dies zu korrigieren, muss entweder sal zur GROUP BY-Klausel hinzugefügt oder eine Aggregatfunktion darauf verwendet werden:

-- Add sal to the GROUP BY clause
SELECT ename, MIN(sal), MAX(sal)
FROM emp
GROUP BY ename, sal;

-- Use an aggregate function on sal
SELECT ename, SUM(sal)
FROM emp
GROUP BY ename;

Begründung der Regeln

Die GROUP BY-Operation führt Zeilen mit identischen Werten in GROUP BY zusammen Spalten, wodurch eine einzelne Zeile für jeden eindeutigen Wertesatz entsteht. Das Einbeziehen von Nicht-GROUP BY-Spalten in die SELECT-Liste ohne Aggregatfunktionen führt zu Mehrdeutigkeiten, da unklar ist, wie ein repräsentativer Wert für jede Gruppe ausgewählt werden soll.

Zum Beispiel, wenn Sie eine Tabelle mit den Spalten „Name“ und „Alter“ haben und eine GRUPPE verwenden NACH Name, welches Alter soll im Ergebnis für jeden Namen angezeigt werden? Durch die Verwendung von Aggregatfunktionen wie MIN, MAX oder SUM geben Sie explizit an, wie mit solchen Spalten umgegangen werden soll.

Das obige ist der detaillierte Inhalt vonWie funktioniert die GROUP BY-Klausel von SQL ohne Aggregatfunktionen?. 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