phpbar.de logo

Mailinglisten-Archive

[php] Re: [etwas OT] DB-Zeilen "filtern"

[php] Re: [etwas OT] DB-Zeilen "filtern"

Manuel Hossfeld lists_(at)_hossfeld.de
Thu, 1 Jul 1999 16:13:26 +0200


Hallo Martin,

vielen Dank für die Erklärung.

> GROUP BY bewirkt, daß alle Datensätze mit dem gleichen Gruppierungs-
> merkmal (hier z.B. der gleichen doc_id) zu einer Gruppe zusammengefaßt
> werden - und Aggregatsfunktionen wie COUNT() oder MAX() beziehen sich
> dann jeweils auf die so gebildeten Gruppen von Datensätzen.

Ahaaa! Der Teil nach dem Bindestrich war entscheidend! Das wusste ich nämlich
bisher nicht; da ich "group by" zwar kannte, aber nie selbst benutzt hatte, bin
ich jetzt naiverweise mal davon ausgegangen, daß Gruppierungs-
und Aggregatsfunktionen unabhängig voneinander sind...

> "SELECT id, version FROM doc GROUP BY id" ist in Standard-SQL
> verboten, weil hier nicht klar wäre, welcher Wert für version
> pro Gruppe ausgegeben werden muß.

Ja, genau. Das habe ich mich nämlich auch gefragt - deshalb war ich auch etwas
verwirrt. Zuerst dachte ich "naja, der nimmt dann halt immer den jeweils ersten
Datensatz in einer Gruppe", aber dann viel mir gleich ein: "Blödsinn, in einer
SQL-Ergebnismenge gibt es ja eigentlich gar kein "erster" und "letzter"! "

> Deshalb die Regel, daß bei
> GROUP BY-Anfragen nur Felder verlangt werden dürfen, die zur
> Gruppierung genutzt werden (weil die dann per definitionem
> innerhalb jeder Gruppe den gleichen Wert haben).

Sprich: "Group by" macht nur zusammen mit count, max, min, avg usw. Sinn.
Jetzt leuchtet mir das auch ein...
(BTW: Wobei "SELECT id, version FROM doc GROUP BY id" zumindest bei MySQL
witzigerweise geht. Möchte mal wissen, nach welchen Kriterien er da die
Datensätze aus den Gruppen auswählt...)

> Ich empfehle, daß Du mal etwas Literatur zu SQL liest.
 
Völlig richtig. Habe ich sogar schon - aber offenbar noch nicht genug
bzw. nicht die richtige... ;-)

Danke nochmal,
CU,
Manuel


php::bar PHP Wiki   -   Listenarchive