Informatik 12/13 Seite 1 von 2 Erstelldatum 19.09.2007 14:10:00 Die SELECT-Anweisung: Zeilen zusammenfassen Manchmal interessiert man sich auch nur dafür, wie oft z.B. ein bestimmter Name vorkommt. Man möchte sich also nicht alle Zeilen mit einem bestimmten Nachnamen angeben lassen sondern nur die unterschiedlichen und deren Häufigkeit. SELECT nachname FROM patienten ORDER BY nachname ASC; Die obige Zeile bringt einen der Lösung bereits ein wenig nahe. Man müsste nun nur noch die Liste durchgehen und bei gleichen Namen die Zeilen zusammenzählen. In SQL gruppiert man nun gleiche Zeilen zu einer. SELECT nachname FROM patienten GROUP BY nachname; Nun hat man eine Liste aller Nachname, nicht aber deren absolute Häufigkeit. Man muss noch die Zeilen mit gleichem Namen zählen. Das geht mit der COUNT(...)Funktion. SELECT nachname, COUNT(nachname) FROM patienten GROUP BY nachname; In Excel heißen die Spalten jetzt nachname und COUNT(nachname). Die zweite Spalte sollte besser haeufigkeit heißen. Wandle die Abfrage ab! In der Datenbank Sponsorenlauf könnte man sich nun dafür interessieren, wie oft die Schüler 0 Runden, 1 Runde, 2 Runden, ... gelaufen sind. In der neuen Datenbank wetter wäre es mal interessant, wie viele Datensätze zu den einzelnen Tagen vorliegen. Um aus der Datumsangabe einzelne Tage herausfischen zu können benötigt man Datumsfunktionen (siehe auch Google: mysql referenzhandbuch -> Datumsfunktionen). Hier passt die DATE(...)-Funtion. Sie macht aus einem Datum mit Zeitangabe einfach ein Datum. Lass dir aus der wetter-Datenbank angeben, wie viele Datensätze es zu jedem einzelnen Tag gibt. Lass dir angebe, wie viele Datensätze es zu allen Tagen im September gibt (MONTH(...)-Funktion). Lass dir angeben, wie viele Datensätze es zu den einzelnen Monaten gibt. Lass dir aus der Altersheim-Tabelle angeben, wie viele Patienten jeweils die Medikamente 1,2,3, ... nehmen. Mit GROUP BY kann man nicht nur Zeile Zählen ( COUNT(...) ). Man kann auch über Zeilen summieren ( SUM(...) ). Schauen wir mal die Datenbank sponsorenlauf an. SELECT klasse , COUNT(klasse) as schueler_pro_klasse FROM schueler GROUP BY klasse; Diese Abfrage liefert bereits die Anzahl der Datensätze pro Klasse, also die Anzahl der Schüler. Informatik 12/13 Seite 2 von 2 Erstelldatum 19.09.2007 14:10:00 Nun will man die Anzahl der Runden, die alle Schüler einer Stufe gelaufen sind. Dazu müssen die Runden summiert werden. SELECT klasse, COUNT(klasse) as schueler_pro_klasse, SUM(runden) as gelaufene_runden FROM schueler GROUP BY klasse; (Diese Abfrage ist recht lang. Sie auf mehrere Zeilen zu verteilen fördert die Übersicht.) Interessant wäre auch der Mittelwert, also wie viele Runden die einzelnen Schüler im Mittel gelaufen sind. Informiere dich über die AVG(...) – Funktion. Wie viele Tabletten (0,1,2,...) werden im Altersheim insgesamt genommen? Wetter: Wie warm war es an den einzelnen Tagen im Mittel?