Mailinglisten-Archive |
Manuel Hossfeld schrieb am Donnerstag, den 1. Juli 1999: > Also... "group by" sorgt dafür, daß jede doc_id nur einmal angezeigt > wird, okay. Aber wieso funktioniert das mit MAX()? MAX(version) > alleine zeigt ja einfach nur den Datensatz mit der höchsten > Versionsnr. INSGESAMT an... 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. Beispiel: Die Tabelle "doc" habe folgende Datensätze doc | id | version ----+----+-------- 0 | a 1 | a 2 | a 0 | b 1 | d 2 | c 0 | e 1 | b Dann bewirkt ein "GROUP BY id" folgende Unterteilung in Gruppen: doc | id | version ----+----+-------- 0 | a 0 | b 0 | e ----+-------- 1 | a 1 | d 1 | b ----+-------- 2 | a 2 | c Ein "SELECT ... GROUP BY id" liefert nun jeweils genau ein Ergebnistupel pro Gruppe. "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ß. 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). Ich empfehle, daß Du mal etwas Literatur zu SQL liest. Ciao, Martin -- Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://ramsch.home.pages.de/ > PGP: 0xE8EF4F75, 52 44 5E F3 B0 B1 38 26 E4 EC 80 58 7B 31 3A D7 Never take life seriously. Nobody gets out alive, anyway.
php::bar PHP Wiki - Listenarchive