Probleem:
U wilt uw gegevens in twee kolommen groeperen, zodat u enkele statistieken kunt tellen.
Voorbeeld:
In de order
tabel, heb je de kolommen order_date
, product_id
, customer_id
, en number
. U wilt elke dag het aantal producten tellen dat door elke klant wordt gekocht.
De order
tabel ziet er als volgt uit:
order_date | product_id | customer_id | nummer |
---|---|---|---|
25-11-2020 | 7 | 1 | 1 |
25-11-2020 | 12 | 1 | 3 |
26-11-2020 | 53 | 1 | 2 |
26-11-2020 | 1 | 2 | 4 |
26-11-2020 | 3 | 2 | 1 |
26-11-2020 | 16 | 2 | 7 |
26-11-2020 | 3 | 3 | 2 |
27-11-2020 | 6 | 3 | 1 |
Oplossing:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Het resultaat is:
order_date | customer_id | products_number |
---|---|---|
26-11-2020 | 3 | 2 |
27-11-2020 | 3 | 1 |
26-11-2020 | 2 | 12 |
25-11-2020 | 1 | 4 |
26-11-2020 | 1 | 2 |
Discussie:
Om te groeperen op twee kolommen, gebruik je gewoon GROUP BY
met twee kolommen. De kolomnamen moeten worden vermeld achter de GROUP BY
trefwoord en gescheiden door een komma. Groepen worden gemaakt op basis van de waarden van beide kolommen; voor elk paar waarden wordt een aparte groep gemaakt (bijv. ('2020-11-25', 1)
). Kijk naar de onderstaande tabel, waar elke groep in een andere kleur wordt gepresenteerd:
order_date | customer_id | product_id | nummer |
---|---|---|---|
25-11-2020 | 1 | 7 | 1 |
25-11-2020 | 1 | 12 | 3 |
26-11-2020 | 1 | 53 | 2 |
26-11-2020 | 2 | 1 | 4 |
26-11-2020 | 2 | 3 | 1 |
26-11-2020 | 2 | 16 | 7 |
26-11-2020 | 3 | 3 | 2 |
27-11-2020 | 3 | 6 | 1 |
Als een of beide kolommen NULL
. hebben waarden, worden deze waarden behandeld als een aparte groep (bijv. ('2020-11-26', NULL)
, (NULL, 5)
of (NULL, NULL)
).
Aan de andere kant, als er NULLs
. zijn in een kolom waarop we een aggregatiefunctie toepassen, de NULL
waarden worden gewoon weggelaten. (In dit voorbeeld is de aggregatiefunctie SUM()
en de kolom is number
). Als we de getalswaarden 2 . hadden , 1 , en NULL voor een van de groepen, de SUM(number)
zou gelijk zijn aan 3
(2
en 1
worden bij elkaar opgeteld, en NULL
wordt weggelaten.)
Op dezelfde manier kunt u groeperen op een willekeurig aantal kolommen - schrijf gewoon de kolomnamen in de GROUP BY
clausule en scheid ze met komma's.