Vat veel rijen samen · eindproject
Eindproject: Project: bouw het capaciteitsrapport per categorie
De uitleenbalie wil een compact capaciteitsrapport voor voorwerpen met gebruikelijke termijnen van veertien dagen of minder. Een categorie hoort alleen in het rapport wanneer ten minste twee passende voorwerpen de samenvatting ondersteunen. De categorie met de meeste totale uitleendagen moet bovenaan staan.
Open het nieuwe category_report.sql. De beginquery geeft alleen categoriewaarden terug. Vervang die door één instructie die deze opdracht volgt:
Geef
category,item_countentotal_loan_daysterug, in die volgorde.Tel met
COUNT(*)en telloan_daysbij elkaar op metSUM.Laat alleen bronrijen met
loan_days <= 14bijdragen.Maak één groep per categorie en behoud groepen met
COUNT(*) >= 2.Sorteer op totale uitleendagen aflopend, daarna op categorie oplopend.
Dit rapport heeft minder aggregatiekolommen nodig dan summary.sql. Neem minimum, maximum of gemiddelde niet over alleen omdat ze beschikbaar zijn. Een bruikbaar rapport beantwoordt de gevraagde vraag zonder de lezer door niet-relevante waarden te laten zoeken.
Plan de twee filters voordat je gaat schrijven. De termijnlimiet beschrijft één voorwerp, dus hoort die in WHERE voordat groepen worden gevormd. Het minimumaantal beschrijft een gevormde categoriegroep, dus hoort dat in HAVING na GROUP BY.
Geef het antwoord daarna vorm voor de lezer. Selecteer de groepeersleutel eerst, zodat elke rij zijn categorie noemt. Laat het aantal en totaal volgen en geef beide aggregatiewaarden de vereiste koppen. De sortering mag naar total_loan_days verwijzen, omdat die alias het berekende totaal in dit resultaat benoemt.
Druk op Run en zoek het projectonderdeel:
== category_report.sql ==
Columns: category | item_count | total_loan_days
events | 2 | 21
tools | 2 | 10
Elektronica heeft nog maar één voorwerp nadat de luidspreker boven de limiet is verwijderd, dus de gevormde groep voldoet niet aan de regel voor het aantal. Evenementen komt vóór gereedschap omdat 21 groter is dan 10.
Submit gebruikt positieve termijnen met een gebroken deel, gelijke totalen, een door elkaar gehusselde invoegvolgorde en een groep die alleen vóór het verwijderen van de rij boven de limiet aan het minimum voldoet. Het probeert ook een catalogus waarin geen enkele groep overblijft. Behoud de drie koppen, ook wanneer het resultaat geen rijen heeft.
Bij een gelijk totaal verdwijnt geen van beide categorieën. De tweede sleutel, categorie, bepaalt alleen welke samenvattingsrij met een gelijk totaal als eerste verschijnt. Elke behouden groep blijft dus precies één keer vertegenwoordigd.
Als je waarden kloppen maar de rijen van plaats wisselen, bekijk dan beide sorteersleutels. total_loan_days DESC zet grotere totalen vooraan; category ASC beslist voorspelbaar bij gelijke totalen.
Je hebt een rapport gebouwd door te bepalen wat bijdraagt, hoe rijen worden gecombineerd, welke samenvattingen overblijven en hoe lezers die ontvangen. Dat zijn de centrale keuzes waarmee je veel databaserijen omzet in een klein antwoord waar iemand mee aan de slag kan.
Opdracht
Bouw category_report.sql op basis van de rapportopdracht hierboven. Geef alleen categorie, aantal en totaal terug, plaats de rij- en groepsfilters in de juiste fasen en leg de volgorde van de behouden groepen volledig vast.
Voer het rapport uit, vergelijk het met elk opsommingsteken en stuur het in.