sql >> Database >  >> RDS >> Database

Hoe te groeperen op twee kolommen in SQL

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.


  1. Converteer 'smalldatetime' naar 'date' in SQL Server (T-SQL-voorbeelden)

  2. Oracle SQL*Plus gebruiken

  3. GROUPING- en GROUPING_ID-functies in SQL Server begrijpen

  4. Wanneer het DRY-principe niet van toepassing is:BITWISE-bewerkingen in SQL Server