Viele Zeilen zusammenfassen · Übung
Die kürzeste und längste Leihdauer finden
Die Summe 54.0 erstreckt sich über alle sechs Gegenstände, verbirgt aber die Spannweite innerhalb dieser Summe. Die kürzeste übliche Leihdauer beträgt zweieinhalb Tage, die längste zwanzigeinhalb. Diese Grenzwerte helfen dem Verleihtresen zu erkennen, wie unterschiedlich die Regelungen des Katalogs sind.
Öffne summary.sql. Füge hinter der Summe diese beiden Ausdrücke in dieser Reihenfolge hinzu:
MIN(loan_days) AS shortest_loan_days,
MAX(loan_days) AS longest_loan_days
Denke an das Komma hinter der vorhandenen Summe. Die vollständige SELECT-Liste enthält jetzt Anzahl, Summe, kürzesten und längsten Wert vor FROM items.
Klicke auf Run. SQLite sollte weiterhin genau eine Zusammenfassungszeile zurückgeben:
Columns: item_count | total_loan_days | shortest_loan_days | longest_loan_days
6 | 54.0 | 2.5 | 20.5
MIN(loan_days) findet den kleinsten Wert unter den beitragenden Zeilen. MAX(loan_days) findet den größten. Beide untersuchen dieselbe Spalte und dieselben Quellzeilen wie die Summe, beantworten aber unterschiedliche Fragen über diese Menge.
Sieh dir die sechs sichtbaren Leihdauern noch einmal an: 7, 3, 7, 14, 2.5 und 20.5. Nichts liegt unter 2.5, und nichts liegt über 20.5. Die Werte zwischen diesen Grenzen tragen weiterhin zu Anzahl und Summe bei, obwohl sie keinen der Grenzwerte verändern.
Diese Funktionen geben die Grenzwerte selbst zurück, nicht die vollständigen Gegenstandszeilen, die sie enthalten. Die Frage lautet hier: „Was sind die kürzeste und die längste Leihdauer?“ Sie lautet nicht: „Welche Gegenstände haben diese Leihdauern?“ Diese zweite Frage braucht mehr SQL, als du für diese Zusammenfassung benötigst.
Die Reihenfolge der Ergebnisspalten macht die Antwort leichter lesbar: Der untere Grenzwert kommt vor dem oberen. Halte die Aliase bei den passenden Funktionen. Nur die Überschriften zu vertauschen würde dazu führen, dass ein korrekter Wert den Lesenden etwas Falsches vermittelt.
Submit verwendet Leihdauern, die du noch nicht gesehen hast, einschließlich wiederholter Grenzwerte und positiver Werte mit Nachkommastellen. Ein doppelter kürzester Wert verändert das Minimum nicht. Er bedeutet nur, dass mehr als eine Quellzeile diesen Wert hat. Lass SQLite die Grenzwerte finden, statt wie bei einer engeren Auswahl Zeilen zu sortieren und zu begrenzen.
Sortieren mit LIMIT 1 könnte in einer separaten Abfrage ein Ende finden. Dieser Bericht braucht aber beide Enden neben den vorhandenen Aggregaten in derselben Ergebniszeile. MIN und MAX drücken diese Absicht direkt aus.
Wenn die Werte unter den falschen Überschriften erscheinen, verfolge jeden Ausdruck von der Funktion zum Alias. MIN gehört zu shortest_loan_days; MAX gehört zu longest_loan_days.
Dein Bericht mit einer Zeile zeigt jetzt die Größe des Katalogs, seine gesamte Leihzeit und die beiden Werte, die die Spannweite zwischen der kürzesten und längsten Leihdauer markieren.
Aufgabe
Füge MIN(loan_days) AS shortest_loan_days und MAX(loan_days) AS longest_loan_days hinter der bestehenden Anzahl und Summe hinzu.
Führe die Abfrage aus, prüfe die Überschriften und Werte der Grenzen und reiche sie ein.