Database
 sql >> Datenbank >  >> RDS >> Database

So gruppieren Sie nach zwei Spalten in SQL

Problem:

Sie möchten Ihre Daten nach zwei Spalten gruppieren, damit Sie einige Statistiken zählen können.

Beispiel:

In der order Tabelle haben Sie die Spalten order_date , product_id , customer_id , und number . Sie möchten die Anzahl der Produkte zählen, die jeder Kunde jeden Tag kauft.

Die order Tabelle sieht so aus:

order_date product_id Kunden-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ösung:

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

Das Ergebnis ist:

order_date Kunden-ID Produktnummer
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:

Um nach zwei Spalten zu gruppieren, verwenden Sie einfach GROUP BY mit zwei Säulen. Die Spaltennamen sollten nach GROUP BY aufgelistet werden Schlüsselwort und durch ein Komma getrennt. Gruppen werden basierend auf den Werten beider Spalten erstellt; für jedes Wertepaar wird eine separate Gruppe erstellt (z. B. ('2020-11-25', 1) ). Sehen Sie sich die folgende Tabelle an, in der jede Gruppe in einer anderen Farbe dargestellt wird:

order_date Kunden-ID product_id Nummer
2020-11-25 1 7 1
25.11.2020 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

Wenn eine oder beide Spalten NULL haben -Werte werden diese Werte als separate Gruppe behandelt (z. B. ('2020-11-26', NULL) , (NULL, 5) oder (NULL, NULL) ).

Andererseits, wenn es NULLs gibt in einer Spalte, auf die wir eine Aggregatfunktion anwenden, den NULL Werte werden einfach weggelassen. (In diesem Beispiel ist die Aggregatfunktion SUM() und die Spalte ist number ). Wenn wir die Zahlenwerte 2 hätten , 1 und NULL für eine der Gruppen die SUM(number) würde 3 entsprechen (2 und 1 zusammenaddiert werden, und NULL weggelassen.)

Auf ähnliche Weise können Sie nach einer beliebigen Anzahl von Spalten gruppieren – schreiben Sie einfach die Spaltennamen in GROUP BY Satz und trennen Sie sie durch Kommas.