Mailinglisten-Archive |
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