Hoofdstuk 4 · oefening
Vat veel rijen samen
Tel de voorwerpen in de catalogus
De uitleenbalie heeft niet altijd één rij voor elk voorwerp nodig. Soms is de hele vraag: “Hoeveel voorwerpen staan er in de catalogus?” Zes inventariscodes teruggeven en die op het oog tellen zou Python en de lezer werk laten doen dat SQLite rechtstreeks kan uitvoeren.
Open summary.sql. Vervang de brede query naar voorwerpen door deze:
SELECT COUNT(*) AS item_count
FROM items;
Druk op Run. Zes opgeslagen rijen met voorwerpen worden één resultaatrij met één waarde:
== summary.sql ==
Columns: item_count
6
COUNT(*) vraagt SQLite om bronrijen te tellen. De ster betekent dat elke rij meetelt, ongeacht de waarden die erin staan. Dit is een aggregatie: ze kijkt naar meerdere bronrijen en produceert een samenvattende waarde in plaats van één antwoordrij per voorwerp.
Vergelijk dat met de beginquery. SELECT asset_tag FROM items produceert één resultaatrij voor elke bronrij, omdat elke code afzonderlijk wordt getoond. COUNT(*) gebruikt dezelfde bronverzameling, maar rapporteert de omvang ervan. Het resultaat stelt dus geen afzonderlijk voorwerp meer voor.
De alias AS item_count geeft die waarde een bruikbare kop. Hij voegt geen kolom aan items toe; hij geeft alleen dit resultaat vorm, net als de aliassen in je shortlist.
Het project bevat ook run_summaries.py. Laat dat bestand ongewijzigd. Wanneer je op Run drukt, maakt het een nieuwe kopie van de bekende catalogus met zes voorwerpen, voert het elk aanwezig samenvattingsbestand uit en drukt het de kolommen en waarden van SQLite af. Je werk blijft in summary.sql staan; de tijdelijke database verdwijnt na het uitvoeren.
Bij een lege catalogus is er een belangrijk detail. COUNT(*) geeft nog steeds één resultaatrij terug wanneer de tabel geen rijen heeft, en de waarde in die rij is 0. Dat verschilt van een zoekopdracht waarvan het resultaat helemaal geen rijen bevat. Een samenvatting kan melden dat nul rijen hebben bijgedragen.
Submit probeert zowel gevulde als lege catalogussen. Gebruik COUNT(*) in plaats van een bepaalde kolom te tellen, een letterlijke waarde toe te voegen of de zichtbare 6 over te nemen. De vraag gaat specifiek over het aantal bronrijen.
Als je het beginbestand opnieuw nodig hebt, gebruik je Reset project en open je deze pagina daarna opnieuw. Zodra Run de kop item_count en één waarde toont, heb je de vorm van het antwoord veranderd: veel catalogusrijen zijn nu één bruikbaar gegeven.
Opdracht
Vervang summary.sql door een query die COUNT(*) AS item_count uit items teruggeeft.
Voer hem uit en controleer of de zes zichtbare rijen één aantal worden. Stuur hem daarna in.