sql >> Databasteknik >  >> RDS >> Database

Hur man grupperar efter två kolumner i SQL

Problem:

Du vill gruppera dina data i två kolumner så att du kan räkna lite statistik.

Exempel:

I order tabell, har du kolumnerna order_date , product_id , customer_id och number . Du skulle vilja räkna antalet produkter som köps av varje kund varje dag.

order tabellen ser ut så här:

order_date produkt-id kund-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 är:

order_date kund-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:

För att gruppera efter två kolumner, använd helt enkelt GROUP BY med två kolumner. Kolumnnamnen ska listas efter GROUP BY nyckelord och avgränsade med kommatecken. Grupper kommer att skapas baserat på värdena för båda kolumnerna; för varje värdepar skapas en separat grupp (t.ex. ('2020-11-25', 1) ). Titta på tabellen nedan, där varje grupp presenteras i olika färger:

order_date kund-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

Om en eller båda kolumnerna har NULL värden behandlas dessa värden som en separat grupp (t.ex. ('2020-11-26', NULL) , (NULL, 5) eller (NULL, NULL) ).

Å andra sidan, om det finns NULLs i en kolumn där vi tillämpar en aggregerad funktion, NULL värden utelämnas helt enkelt. (I det här exemplet är aggregatfunktionen SUM() och kolumnen är number ). Om vi ​​hade talvärdena 2 , 1 och NULL för en av grupperna, SUM(number) skulle vara lika med 3 (2 och 1 läggs ihop och NULL är utelämnad.)

På samma sätt kan du gruppera efter valfritt antal kolumner – skriv bara kolumnnamnen i GROUP BY och separera dem med kommatecken.


  1. Kontrollera om en Postgres JSON-array innehåller en sträng

  2. Hantering av samtidiga uppdateringar i viloläge

  3. Hur man övervakar PostgreSQL 12-prestanda med OmniDB – Del 2

  4. MS-Access basklass och härledda objekt