0%

Kapitel 4 · Übung

Viele Zeilen zusammenfassen

Die Gegenstände im Katalog zählen

Der Verleihtresen braucht nicht immer eine Zeile für jeden Gegenstand. Manchmal lautet die ganze Frage: „Wie viele Gegenstände enthält der Katalog?“ Sechs Inventarkennzeichen zurückzugeben und von Hand zu zählen würde Python und den Lesenden Arbeit aufbürden, die SQLite direkt erledigen kann.

Öffne summary.sql. Ersetze die breit gefasste Gegenstandsabfrage durch diese:

SELECT COUNT(*) AS item_count
FROM items;

Klicke auf Run. Aus sechs gespeicherten Gegenstandszeilen wird eine Ergebniszeile mit einem Wert:

== summary.sql ==
Columns: item_count
6

COUNT(*) fordert SQLite auf, Quellzeilen zu zählen. Der Stern bedeutet, dass jede Zeile zählt, unabhängig von ihren Werten. Das ist ein Aggregat: Es betrachtet mehrere Quellzeilen zusammen und erzeugt einen zusammenfassenden Wert statt einer Antwortzeile pro Gegenstand.

Vergleiche das mit der anfänglichen Abfrage. SELECT asset_tag FROM items erzeugt für jede Quellzeile eine Ergebniszeile, weil jedes Kennzeichen einzeln gezeigt wird. COUNT(*) verarbeitet dieselbe Quellmenge, meldet aber ihre Größe. Das Ergebnis steht daher nicht mehr für einen einzelnen Gegenstand.

Der Alias AS item_count gibt diesem Wert eine nützliche Überschrift. Er fügt items keine Spalte hinzu, sondern gestaltet nur dieses Ergebnis, genauso wie die Aliase in deiner engeren Auswahl.

Das Projekt enthält auch run_summaries.py. Lass diese Datei unverändert. Wenn du auf Run klickst, erstellt sie eine neue Kopie des bekannten Katalogs mit sechs Gegenständen, führt jede vorhandene Zusammenfassungsdatei aus und gibt SQLites Spalten und Werte aus. Deine Arbeit bleibt in summary.sql; die temporäre Datenbank verschwindet nach dem Durchlauf.

Bei einem leeren Katalog gibt es ein wichtiges Detail. COUNT(*) gibt weiterhin eine Ergebniszeile zurück, wenn die Tabelle keine Zeilen hat, und der Wert in dieser Zeile ist 0. Das unterscheidet sich von einer Suche, deren Ergebnis überhaupt keine Zeilen enthält. Eine Zusammenfassung kann melden, dass null Zeilen beigetragen haben.

Submit probiert sowohl nicht leere als auch leere Kataloge aus. Verwende COUNT(*), statt eine bestimmte Spalte zu zählen, einen Literalwert hinzuzufügen oder die sichtbare 6 zu kopieren. Die Frage bezieht sich ausdrücklich auf die Anzahl der Quellzeilen.

Wenn du die Ausgangsdatei wieder brauchst, verwende Reset project und öffne dann diese Seite erneut. Sobald Run die Überschrift item_count und einen Wert zeigt, hast du die Form der Antwort verändert: Aus vielen Katalogzeilen ist eine nützliche Information geworden.

Aufgabe

Ersetze summary.sql durch eine Abfrage, die COUNT(*) AS item_count aus items zurückgibt.

Führe sie aus und prüfe, ob die sechs sichtbaren Zeilen zu einer Anzahl werden. Reiche sie dann ein.