sql >> Database teknologi >  >> RDS >> Database

Sådan grupperes efter to kolonner i SQL

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.


  1. Hvordan bruger man Oracles LISTAGG-funktion med et unikt filter?

  2. INSERT INTO eller OPDATERING med to betingelser

  3. oci_connect forbindelse mislykkedes

  4. Oracle ORA-01008:ikke alle variable er bundet Fejl m/parametre