Aggregatfunktionen wie COUNT, MIN, MAX, AVG beziehen sich ja nicht auf einzelne Datensätze, sondern auf eine Gruppe von Datensätzen. Deshalb ist es notwendig, nach allen Feldern zu gruppieren, die nicht Aggregatfelder sind. Je mehr dieser Felder Du abfragst, desto feiner die Gruppierung.
[edit] Ein Beispiel: gegeben sei folgende Tabelle
Code:
Name | Vorname
=================
Meier | Hans
Müller | Klaus
Schmidt | Dieter
Meier | Franz
Müller | Emil
Um festzustellen, welcher Nachname wie oft vorkommt, lautet die Abfrage
SQL-Code:
SELECT Name, COUNT(*)
FROM Tabelle
GROUP BY Name
Dabei sollte herauskommen:
Meier 2
Müller 2
Schmidt 1
Um das Ganze auf die Kombination von Nach- und Vornamen auszuweiten, muss es also lauten
SQL-Code:
SELECT Name, Vorname, COUNT(*)
FROM Tabelle
GROUP BY Name, Vorname
Ließe man den Vornamen aus der Gruppierung heraus, wie soll das Abfrageergebnis dann aussehen? Soll der Vorname wegfallen oder mehrfach gelistet werden oder was sonst? Das
DBMS kann das ja nicht alleine entscheiden, daher wäre eine solche Abfrage ungültig (in bestimmten
DBMS ist dem AFAIK nicht so, aber das entspricht nicht dem
SQL-Standard)[/edit]