Viele Zeilen zusammenfassen · Übung
Eine Zusammenfassung pro Kategorie erstellen
Ein Durchschnitt für den gesamten Katalog vermischt Elektronik, Veranstaltungsausrüstung und Werkzeuge. Der Verleihtresen würde aus drei kleineren Zusammenfassungen mehr erfahren, einer pro Kategorie. Damit kann er Gruppen vergleichen, die unterschiedlichen Bedürfnissen dienen.
Öffne summary.sql. Füge category als erste ausgewählte Spalte hinzu und setze dann diese beiden Klauseln hinter FROM items:
GROUP BY category
ORDER BY category ASC;
Behalte alle fünf Aggregatausdrücke bei. Die vollständige Form beginnt mit category, gefolgt von Anzahl, Summe, kürzester, längster und durchschnittlicher Leihdauer.
Klicke auf Run. SQLite gibt eine Zeile pro Kategorie zurück:
Columns: category | item_count | total_loan_days | shortest_loan_days | longest_loan_days | average_loan_days
electronics | 2 | 23.0 | 2.5 | 20.5 | 11.5
events | 2 | 21 | 7 | 14 | 10.5
tools | 2 | 10 | 3 | 7 | 5.0
GROUP BY category sammelt Quellzeilen mit demselben Kategoriewert. Jedes Aggregat arbeitet dann innerhalb einer Gruppe statt über die ganze Tabelle hinweg. Die Anzahl für Elektronik beträgt 2, weil zwei Zeilen zu dieser Gruppe beitragen, und ihre Summe 23.0 stammt nur aus deren beiden Leihdauern.
Verfolge die Veranstaltungszeilen als konkrete Gruppe. Der Klapptisch trägt 7 Tage bei und die Projektionsleinwand 14. Ihre Gruppe hat die Anzahl 2, die Summe 21, die Grenzwerte 7 und 14 und den Durchschnitt 10.5. Werte von Werkzeugen und Elektronik gehen nie in diese Berechnungen ein.
Der ausgewählte Wert category heißt Gruppenschlüssel. Er sagt den Lesenden, welche Gruppe jede Zusammenfassungszeile beschreibt. Ohne ihn kämen drei Zahlenzeilen ohne Beschriftung an, die sie mit Elektronik, Veranstaltungsausrüstung oder Werkzeugen verbindet.
Jeder Quellgegenstand hat einen Kategoriewert, also trägt jede Zeile hier zu einer Gruppe bei. Eine neue Kategorie würde automatisch eine neue Ergebniszeile erzeugen. Du schreibst weder eine Abfrage pro Kategorie noch listest du die bekannten Kategorienamen im Voraus auf.
ORDER BY category ASC macht die Gruppenzeilen vorhersehbar. Gruppieren entscheidet, welche Zeilen zusammengehören; es verspricht nicht, in welcher Reihenfolge Gruppen erscheinen. Die letzte Klausel fordert ihre Kategorienamen in aufsteigender Reihenfolge an.
Submit variiert Kategorienamen, Gruppengrößen, Einfügereihenfolge und positive Leihdauern mit Nachkommastellen. Stelle sicher, dass jedes Aggregat in der Abfrage bleibt und innerhalb seiner Kategorie berechnet wird. Den Namen eines einzelnen Gegenstands auszuwählen wäre hier nicht sinnvoll, weil eine Gruppe mehrere unterschiedliche Namen enthalten kann.
Wenn jede Zeile weiterhin einen Gegenstand beschreibt, prüfe, ob GROUP BY category vorhanden ist. Wenn du eine Zusammenfassung für die gesamte Tabelle erhältst, stelle sicher, dass category sowohl ausgewählt als auch als Gruppenschlüssel verwendet wird.
Der Bericht hat seine Form erneut verändert. Er sagt nicht mehr nur: „Hier ist die Zusammenfassung des Katalogs.“ Er sagt: „Hier ist eine vollständige Zusammenfassung für jede Art von Gegenstand.“
Aufgabe
Verwandle summary.sql in eine Zusammenfassung pro Kategorie. Wähle category zuerst aus, behalte alle fünf Aggregate bei, füge GROUP BY category hinzu und sortiere die Gruppen nach category ASC.
Führe die Abfrage aus und reiche die sortierten Kategoriezusammenfassungen ein.