Statische informatie - Statistieken over meerdere groepen
9 belangrijke vragen over Statische informatie - Statistieken over meerdere groepen
Hoe krijg je statistieken over meerdere groepen?
Geef – alleen voor de niveaus A en B – het aantal stukken per genre,
geordend van ‘veel’ naar ‘weinig’. Zie pag 184 Muziekdatabase.
B’. Het resultaat van het groeperen is een gewone tabel, die door toevoe-
ging van een order by -clausule geordend kan worden op een of meer van
zijn kolommen. De order by komt dus ook nu als laatste:
select genre, count(*) aantal -- 4
from Stuk -- 1
where niveau in ('A','B') -- 2
group by genre -- 3
order by 2 desc; -- 5
Resultaat:
GENRE AANTAL
======== =========
klassiek 4
jazz 3
pop 1
Hoe kun je met 'group by' verfijnd groeperen, bijvoorbeeld op 2 niveau's?
en niveau.
Oplossing:
select genre, niveau, count(*)
from Stuk
where niveau is not null -- alleen speelstukken
group by genre, niveau;
Resultaat:
GENRE NIVEAU COUNT
======== ====== =========
jazz A 1
jazz B 2
klassiek A 1
klassiek B 3
pop A 1
Door nog meer kolommen in de group by -clausule op te nemen, kan de
groepenindeling nog verder worden verfijnd.
- Hogere cijfers + sneller leren
- Niets twee keer studeren
- 100% zeker alles onthouden
Hoe orden ik op een juiste manier bij groeperen met meerder niveau's? Doe eens voor?
gelijk niveau alfabetisch per genre. Het ligt voor de hand om dan ook in
de select -lijst en achter de group by genre en niveau om te keren:
select niveau, genre, count(*)
from Stuk
where niveau is not null
group by niveau, genre
order by niveau desc, genre;
Resultaat:
NIVEAU GENRE COUNT
====== ======== =========
B jazz 2
B klassiek 3
A jazz 1
A klassiek 1
A pop 1
We zien: verfijnd groeperen vraagt om verfijnd ordenen
Wat is de identificatie van de gegroepeerde tabel?
Wat moet er gebeuren om bij group by het queryresultaat goed te kunnen interpreteren?
kunnen interpreteren en tevens identieke rijen uit te sluiten, moet deze
volledig in de select -clausule worden opgenomen.
De volgende query:
select genre, count(*) aantal -- ongewenst
from Stuk
where niveau <= 'B'
group by genre, niveau
met als resultaat:
GENRE AANTAL
======== =========
jazz 1
jazz 2
klassiek 1
klassiek 3
pop 1
is dus ongewenst, omdat de (genre, niveau)-combinaties waarop het
queryresultaat betrekking heeft, niet worden weergegeven.
De regel dat een select -clausule een volledige identificatie moet bevatten
van de gerepresenteerde entiteiten, is al eerder aan de orde geweest voor
niet-gegroepeerde query’s. Zorg dus dat de select -clausule altijd een
identificatie bevat.
Hoe kun je rijselectie toepassen op 'group by'. Welke rij selecteer je dan?
Geef per genre het aantal stukken van niveau A of B, voor zover dat
aantal groter is dan 1.
select genre, count(*) -- 5
from Stuk -- 1
where niveau in ('A', 'B') -- 2
group by genre -- 3
having count(*) > 1; -- 4
Resultaat:
GENRE COUNT
======== =========
jazz 3
klassiek 4
Wat is best practice bij gebruik van where en having?
pas groeperen ( group by ) en eventueel daarna nog groepen wegselecteren
(met having )
Wat moet je weten bij het groeperen bij een optionele kolom?
gedragen.
Nulls vormen samen 1 groep. Als je die niet wilt, dan moet je dus een where met is not null gebruiken.
De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:
- Een unieke studie- en oefentool
- Nooit meer iets twee keer studeren
- Haal de cijfers waar je op hoopt
- 100% zeker alles onthouden