Vat veel rijen samen · oefening
Vind de kortste en langste uitleentermijn
Het totaal 54.0 omvat alle zes de voorwerpen, maar verbergt het bereik binnen dat totaal. De kortste gebruikelijke termijn is twee en een halve dag; de langste is twintig en een halve dag. Die uitersten helpen de uitleenbalie te zien hoe verschillend de uitleenregels in de catalogus zijn.
Open summary.sql. Voeg na de som deze twee expressies in deze volgorde toe:
MIN(loan_days) AS shortest_loan_days,
MAX(loan_days) AS longest_loan_days
Vergeet de komma na de bestaande som niet. De volledige lijst na SELECT bevat nu het aantal, totaal, minimum en maximum vóór FROM items.
Druk op Run. SQLite hoort nog steeds precies één samenvattingsrij terug te geven:
Columns: item_count | total_loan_days | shortest_loan_days | longest_loan_days
6 | 54.0 | 2.5 | 20.5
MIN(loan_days) vindt de kleinste waarde onder de bijdragende rijen. MAX(loan_days) vindt de grootste. Ze bekijken dezelfde kolom en dezelfde bronrijen als de som, maar beantwoorden andere vragen over die verzameling.
Kijk nog eens naar de zes zichtbare termijnen: 7, 3, 7, 14, 2.5 en 20.5. Niets is lager dan 2.5 en niets is hoger dan 20.5. De waarden tussen die uitersten dragen nog steeds bij aan de telling en som, ook al veranderen ze geen van beide uitersten.
Deze functies geven de uiterste waarden zelf terug, niet de volledige rijen met voorwerpen waarin ze staan. De vraag hier is: “Wat zijn de kortste en langste termijnen?” Het is niet: “Welke voorwerpen hebben die termijnen?” Die tweede vraag vereist meer SQL dan je voor deze samenvatting nodig hebt.
De volgorde van de resultaatkolommen maakt het antwoord makkelijker te lezen: het minimum komt vóór het maximum. Houd de aliassen gekoppeld aan de bijbehorende functies. Als je alleen de koppen omwisselt, vertelt een correcte waarde de lezer het verkeerde verhaal.
Submit gebruikt termijnen die je nog niet hebt gezien, waaronder herhaalde uitersten en positieve kommagetallen. Een dubbele kortste waarde verandert het minimum niet; het betekent alleen dat meerdere bronrijen die waarde delen. Laat SQLite de uitersten vinden in plaats van rijen te sorteren en te beperken zoals je voor een shortlist deed.
Sorteren met LIMIT 1 zou in een aparte query één uiterste kunnen vinden, maar dit rapport heeft beide uitersten naast de bestaande aggregaties in dezelfde resultaatrij nodig. MIN en MAX leggen die bedoeling rechtstreeks vast.
Als de waarden onder de verkeerde koppen verschijnen, volg dan elke expressie van functie naar alias. MIN hoort bij shortest_loan_days; MAX hoort bij longest_loan_days.
Je rapport met één rij toont nu de omvang van de catalogus, de totale uitleentijd en de twee waarden die het bereik tussen de kortste en langste termijn markeren.
Opdracht
Voeg MIN(loan_days) AS shortest_loan_days en MAX(loan_days) AS longest_loan_days toe na de bestaande telling en som.
Voer de query uit, controleer de koppen en waarden van de uitersten en stuur hem in.