Help! die aggregate functies

Oke, misschien een eng woord voor sommige mensen, maar het levert dan ook problemen op als je niet weet hoe je er mee om moet gaan

Quote:
ag·gre·ga·tie (de ~ (v.), ~s, ~s, ~s)
1 samenvoeging => vereniging


Om dit probleem op te lossen hebben we 'Aggregate functies'. Waar het in bovenstaand voorbeeld onduidelijk was hoe B samengevat moest worden om bij de unieke A's te passen, kunnen we de DBMS natuurlijk vertellen welke waarde hij dan moet gebruiken. Zie bijvoorbeeld deze query:

sql:
SELECT a, max(b) FROM Table GROUP BY a

Hier komt het volgende resultaat uit:
A | max(B)
1 | 2
2 | 4



Door de max-functie los te laten op kolom B, hebben we de database duidelijk gemaakt hoe hij moet groeperen. Dus in dit geval groupeert hij op A, en vervolgens laat ie de 'aggregerende functie' los op de verzamelde waardes van B die bij die ene A terecht horen. Andere voorbeelden van aggregate functies zijn min(), avg() en count().

Een ander voorbeeld:

sql:
SELECT a, max(b), count(c) FROM Table GROUP BY a

Hier komt uit:
A | max(B) | count(C)
1 | 2 | 4
2 | 4 | 4

Oftewel we grijpen de A's bij elkaar, en selecteren daarbinnen de hoogste B's en het aantal C's dat we hebben 'weggegroepeerd'.


Hoeveel kolommen kan ik aggregeren en groeperen?

Zoveel je wilt :) Maar let op de hoofdregel: zodra je een GROUP BY-clause gebruikt, moeten alle geselecteerde kolommen terugkomen in de GROUP BY list oftewel een aggregate functie hebben. Een voorbeeld van groeperen op meerdere kolommen:

sql:
SELECT a, b, count(c) FROM Table GROUP BY a, b


Levert op:
A | B | count(C)
1 | 1 | 2
1 | 2 | 2
2 | 3 | 2
2 | 4 | 2

Wat is hier nu gebeurd? Allereerst hebben we gegroepeerd op A's, en daarna op de B's. Van de resulterende set hebben we vervolgens het aantal C's genomen dat 'weggeaggregeerd' is, en dat zijn er inderdaad 2 per groep. Klopt exact dus:)

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.