sql >> Databáze >  >> RDS >> Database

Jak seskupit podle dvou sloupců v SQL

Problém:

Chcete seskupit data do dvou sloupců, abyste mohli počítat nějaké statistiky.

Příklad:

V order tabulky, máte sloupce order_date , product_id , customer_id a number . Chtěli byste spočítat počet produktů zakoupených každým zákazníkem každý den.

order tabulka vypadá takto:

order_date id_produktu customer_id číslo
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

Řešení:

SELECT
  order_date,
  customer_id,
  SUM(number) AS products_number
FROM order

Výsledek je:

order_date customer_id číslo_produktů
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

Diskuse:

Chcete-li seskupit podle dvou sloupců, jednoduše použijte GROUP BY se dvěma sloupci. Názvy sloupců by měly být uvedeny za GROUP BY klíčové slovo a oddělené čárkou. Skupiny budou vytvořeny na základě hodnot obou sloupců; pro každý pár hodnot je vytvořena samostatná skupina (např. ('2020-11-25', 1) ). Podívejte se na tabulku níže, kde je každá skupina zobrazena jinou barvou:

order_date customer_id id_produktu číslo
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

Pokud jeden nebo oba sloupce mají NULLs hodnoty, jsou tyto hodnoty považovány za samostatnou skupinu (např. ('2020-11-26', NULL) , (NULL, 5) nebo (NULL, NULL) ).

Na druhou stranu, pokud existují NULLs ve sloupci, na který aplikujeme agregační funkci, NULLs hodnoty jsou jednoduše vynechány. (V tomto příkladu je agregační funkce SUM() a sloupec je number ). Pokud bychom měli číselné hodnoty 2 , 1 a NULL pro jednu ze skupin SUM(number) by se rovnalo 3 (2 a 1 se sčítají a NULLs je vynecháno.)

Podobně můžete seskupit podle libovolného počtu sloupců – stačí napsat názvy sloupců do GROUP BY klauzule a oddělte je čárkami.


  1. Jak dotazovat sloupec json na prázdné objekty?

  2. Easysoft uvádí ODBC-ODBC Bridge pro Windows 10

  3. PostgreSQL 11:Recenzenti záplat pro rozdělování záplat

  4. použití funkce rownum s> přihlásit oracle