Tutorials
Select: Group by & Having
Deze tutorial gaat over het gebruiken van Group by & Having in de SELECT query
Pagina 1
Inleiding
In deze tutorial gaat het over de SELECT instructie met 2 componenten die tegelijkertijd met elkaar gebruikt kunnen worden: GROUP BY & HAVING. Met GROUP BY kunnen we rijen groeperen op onderlinge overeenkomsten.
De HAVING component is vergelijkbaar met de WHERE component, maar HAVING kan alleen worden gebruikt in combinatie met GROUP BY.
De HAVING component is vergelijkbaar met de WHERE component, maar HAVING kan alleen worden gebruikt in combinatie met GROUP BY.
Pagina 2
Groeperen op 1 Kolom
Een eenvoudige vorm van de GROUP-BY instructie is een query waarbij gewoon 1 kolom gegroepeerd wordt. Stel je een tabel voor genaamd PRODUCTEN, met als rijen ID, NAAM, PRIJS, KORTING dan krijgen we een query als deze:
SELECT naam FROM producten GROUP BY korting;
Met deze query krijgen we als tussenresultaat bijvoorbeeld
5, 18, 13 - Melk, Kaas, Tandenborstel - 20 %
-----------------------------------------------------
8, 25 - Drop, Sla - 15 %
-----------------------------------------------------
27 - Eieren - 10 %
-----------------------------------------------------
36, 39, 48, 51 - Gebak, Taart, Leesboek, Pen - 25 %
-----------------------------------------------------
En als eindresultaat krijgen we dan
Korting
--------
20 %
15 %
10 %
25 %
----------------------------------
Op deze manier zie je goed wat het bijzondere is aan de group-by instructie.
ALs je op deze manier verder gaat kun je handige dingen met deze instructie doen. Hier een voorbeeldje ervan.
query: SELECT korting, COUNT(*) FROM producten GROUP BY korting
hierbij zou je als resultaat krijgen:
Korting - Count(*)
----------------------
20 % - 3
15 % - 2
10 % - 1
25 % - 4
SELECT naam FROM producten GROUP BY korting;
Met deze query krijgen we als tussenresultaat bijvoorbeeld
5, 18, 13 - Melk, Kaas, Tandenborstel - 20 %
-----------------------------------------------------
8, 25 - Drop, Sla - 15 %
-----------------------------------------------------
27 - Eieren - 10 %
-----------------------------------------------------
36, 39, 48, 51 - Gebak, Taart, Leesboek, Pen - 25 %
-----------------------------------------------------
En als eindresultaat krijgen we dan
Korting
--------
20 %
15 %
10 %
25 %
----------------------------------
Op deze manier zie je goed wat het bijzondere is aan de group-by instructie.
ALs je op deze manier verder gaat kun je handige dingen met deze instructie doen. Hier een voorbeeldje ervan.
query: SELECT korting, COUNT(*) FROM producten GROUP BY korting
hierbij zou je als resultaat krijgen:
Korting - Count(*)
----------------------
20 % - 3
15 % - 2
10 % - 1
25 % - 4
Pagina 3
Groeperen op meerdere kolommen
Group-by mag ook meerdere kolommen bevatten. Hierbij het volgende voorbeeld:
SELECT naam FROM producten GROUP BY korting, aantal_verkocht
Er wordt nu dus op 2 kolommen gegroepeerd, alle rijen met dezelfde korting en hetzelfde verkoopaantal worden gegroepeerd.
SELECT naam FROM producten GROUP BY korting, aantal_verkocht
Er wordt nu dus op 2 kolommen gegroepeerd, alle rijen met dezelfde korting en hetzelfde verkoopaantal worden gegroepeerd.
Pagina 4
Inleiding Having
Hiervoor hebben we gezien dat de GROUP BY instructie de rijen van het resultaat groepeerd. Met HAVING kunnen deze groepen geselecteerd worden zoals dat ook met WHERE gedaan wordt. (een verschil is dat HAVING wél Set-funties mag bevatten, in tegenstelling tot de WHERE instructie waar dat niet mag)
Pagina 5
Voorbeeld van Having
We kunnen nu bijvoorbeeld een query maken die onze producten groepeerd op korting, waarvan er minstens 3 met dezelfde korting moeten zijn:
SELECT naam FROM producten GROUP BY korting HAVING COUNT(*) > 2.
Als resultaat van deze query krijg je de producten te zien waarvan er meer dan 2 in dezelfde kortingsklasse zitten.
SELECT naam FROM producten GROUP BY korting HAVING COUNT(*) > 2.
Als resultaat van deze query krijg je de producten te zien waarvan er meer dan 2 in dezelfde kortingsklasse zitten.
Pagina 6
Regel voor Having
Zoals er regels zijn voor set-functies in de SELECT instructie zijn die er ook in de HAVING instructie.
Dictatie: Elke kolomspecificatie die in de HAVING component gespecificeerd is, mag uitsluitend binnen een set-functie voorkomen of moet voorkomen in de lijst van kolommen van de GROUP BY component.
Een voorbeeld van een foute query:
SELECT plaats, count(*) FROM spelers GROUP BY plaats HAVING geb_datum > 1970
Dit is dus fout omdat de kolom die bij having gebruikt wordt niet gespecificeerd wordt in een Set-functie of de lijst met kolommen
Dictatie: Elke kolomspecificatie die in de HAVING component gespecificeerd is, mag uitsluitend binnen een set-functie voorkomen of moet voorkomen in de lijst van kolommen van de GROUP BY component.
Een voorbeeld van een foute query:
SELECT plaats, count(*) FROM spelers GROUP BY plaats HAVING geb_datum > 1970
Dit is dus fout omdat de kolom die bij having gebruikt wordt niet gespecificeerd wordt in een Set-functie of de lijst met kolommen
Reacties
0