Viele Zeilen zusammenfassen · Abschlussprojekt
Abschlussprojekt: Projekt: Den Kapazitätsbericht nach Kategorie erstellen
Der Verleihtresen möchte einen kompakten Kapazitätsbericht für Gegenstände mit üblichen Leihdauern von höchstens vierzehn Tagen. Eine Kategorie gehört nur in den Bericht, wenn mindestens zwei passende Gegenstände ihre Zusammenfassung tragen. Die Kategorie mit den meisten gesamten Leihtagen soll zuerst erscheinen.
Öffne die neue category_report.sql. Ihre anfängliche Abfrage gibt nur Kategoriewerte zurück. Ersetze sie durch eine Anweisung, die diese Anforderungen erfüllt:
Gib
category,item_countundtotal_loan_daysin dieser Reihenfolge zurück.Zähle mit
COUNT(*)und bilde mitSUMdie Summe vonloan_days.Lass nur Quellzeilen mit
loan_days <= 14beitragen.Bilde eine Gruppe pro Kategorie und behalte Gruppen mit
COUNT(*) >= 2.Sortiere nach der Summe der Leihtage absteigend, dann nach Kategorie aufsteigend.
Dieser Bericht braucht weniger Aggregatspalten als summary.sql. Übernimm Minimum, Maximum oder Durchschnitt nicht einfach deshalb, weil sie verfügbar sind. Ein nützlicher Bericht beantwortet die gestellte Frage, ohne die Lesenden unpassende Werte durchsuchen zu lassen.
Plane die beiden Filter vor dem Schreiben. Das Zeitlimit beschreibt einen Gegenstand und gehört daher in WHERE, bevor Gruppen entstehen. Die Mindestanzahl beschreibt eine fertige Kategoriegruppe und gehört daher in HAVING hinter GROUP BY.
Gestalte die Antwort dann für die Lesenden. Wähle zuerst den Gruppenschlüssel aus, damit jede Zeile ihre Kategorie benennt, gefolgt von Anzahl und Summe, und gib beiden Aggregatwerten die erforderlichen Überschriften. Die Sortierung kann sich auf total_loan_days beziehen, weil dieser Alias die fertige Summe in diesem Ergebnis benennt.
Klicke auf Run und finde den Projektabschnitt:
== category_report.sql ==
Columns: category | item_count | total_loan_days
events | 2 | 21
tools | 2 | 10
Elektronik hat nur noch einen Gegenstand, nachdem der Lautsprecher über dem Limit entfernt wurde. Daher besteht die fertige Gruppe die Anzahlregel nicht. Veranstaltungsausrüstung kommt vor Werkzeugen, weil 21 größer ist als 10.
Submit verwendet positive Leihdauern mit Nachkommastellen, gleiche Summen, eine durcheinandergeratene Einfügereihenfolge und eine Gruppe, die das Minimum nur erreicht, bevor ihre Zeile über dem Limit entfernt wird. Außerdem probiert es einen Katalog aus, bei dem keine Gruppe übrig bleibt. Behalte die drei Überschriften auch dann bei, wenn das Ergebnis keine Zeilen enthält.
Eine gleiche Summe lässt keine der Kategorien verschwinden. Der zweite Sortierschlüssel für die Kategorie entscheidet nur, welche Zusammenfassungszeile bei gleicher Summe zuerst erscheint. Jede beibehaltene Gruppe bleibt daher genau einmal vertreten.
Wenn deine Werte korrekt sind, die Zeilen aber vertauscht erscheinen, prüfe beide Sortierschlüssel. total_loan_days DESC stellt größere Summen zuerst dar; category ASC löst gleiche Summen vorhersehbar auf.
Du hast einen Bericht erstellt, indem du entschieden hast, was beiträgt, wie Zeilen zusammenkommen, welche Zusammenfassungen bleiben und wie Lesende sie erhalten. Das sind die zentralen Entscheidungen, wenn aus vielen Datenbankzeilen eine kleine Antwort entstehen soll, mit der jemand arbeiten kann.
Aufgabe
Erstelle category_report.sql anhand der obigen Berichtsanforderungen. Gib nur Kategorie, Anzahl und Summe zurück, setze Zeilen- und Gruppenfilter an die richtigen Stellen und lege die Reihenfolge der beibehaltenen Gruppen vollständig fest.
Führe den Bericht aus, vergleiche ihn mit jedem Punkt und reiche ihn ein.