Problem:
Du vil gruppere dine data i to kolonner, så du kan tælle nogle statistikker.
Eksempel:
I order
tabel, har du kolonnerne order_date
, product_id
, customer_id
og number
. Du vil gerne tælle antallet af produkter købt af hver kunde hver dag.
order
tabellen ser sådan ud:
order_date | produkt-id | kunde-id | nummer |
---|---|---|---|
2020-11-25 | 7 | 1 | 1 |
2020-11-25 | 12 | 1 | 3 |
2020-11-26 | 53 | 1 | 2 |
2020-11-26 | 1 | 2 | 4 |
2020-11-26 | 3 | 2 | 1 |
2020-11-26 | 16 | 2 | 7 |
2020-11-26 | 3 | 3 | 2 |
2020-11-27 | 6 | 3 | 1 |
Løsning:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Resultatet er:
order_date | kunde-id | products_number |
---|---|---|
2020-11-26 | 3 | 2 |
2020-11-27 | 3 | 1 |
2020-11-26 | 2 | 12 |
2020-11-25 | 1 | 4 |
2020-11-26 | 1 | 2 |
Diskussion:
For at gruppere efter to kolonner skal du blot bruge GROUP BY
med to søjler. Kolonnenavnene skal stå efter GROUP BY
søgeord og adskilt af et komma. Grupper vil blive oprettet baseret på værdierne i begge kolonner; for hvert værdipar oprettes en separat gruppe (f.eks. ('2020-11-25', 1)
). Se på tabellen nedenfor, hvor hver gruppe præsenteres i en anden farve:
order_date | kunde-id | produkt-id | nummer |
---|---|---|---|
2020-11-25 | 1 | 7 | 1 |
2020-11-25 | 1 | 12 | 3 |
2020-11-26 | 1 | 53 | 2 |
2020-11-26 | 2 | 1 | 4 |
2020-11-26 | 2 | 3 | 1 |
2020-11-26 | 2 | 16 | 7 |
2020-11-26 | 3 | 3 | 2 |
2020-11-27 | 3 | 6 | 1 |
Hvis en eller begge kolonner har NULL
værdier, behandles disse værdier som en separat gruppe (f.eks. ('2020-11-26', NULL)
, (NULL, 5)
eller (NULL, NULL)
).
På den anden side, hvis der er NULLs
i en kolonne, hvor vi anvender en aggregeret funktion, NULL
værdier er simpelthen udeladt. (I dette eksempel er den samlede funktion SUM()
og kolonnen er number
). Hvis vi havde talværdierne 2 , 1 , og NULL for en af grupperne, SUM(number)
ville svare til 3
(2
og 1
lægges sammen og NULL
er udeladt.)
På samme måde kan du gruppere efter et hvilket som helst antal kolonner – bare skriv kolonnenavnene i GROUP BY
klausul og adskil dem med kommaer.