問題:
いくつかの統計を数えることができるように、データを2つの列でグループ化する必要があります。
例:
order
テーブルには、order_date
列があります 、product_id
、customer_id
、およびnumber
。各顧客が毎日購入した製品の数を数えたいと考えています。
order
テーブルは次のようになります:
order_date | product_id | customer_id | |
---|---|---|---|
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 |
解決策:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
結果は次のとおりです。
order_date | customer_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 |
ディスカッション:
2つの列でグループ化するには、GROUP BY
を使用するだけです。 2列あり。列名は、GROUP BY
の後にリストする必要があります キーワードで、コンマで区切ります。グループは、両方の列の値に基づいて作成されます。値のペアごとに、個別のグループが作成されます(例:('2020-11-25', 1)
)。以下の表を見てください。各グループは異なる色で表示されています:
order_date | customer_id | product_id | |
---|---|---|---|
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 |
一方または両方の列にNULL
がある場合 値の場合、これらの値は個別のグループとして扱われます(例:('2020-11-26', NULL)
、(NULL, 5)
または(NULL, NULL)
。
一方、NULLs
がある場合 集計関数を適用する列のNULL
値は単に省略されます。 (この例では、集計関数はSUM()
です。 列はnumber
)。数値が2の場合 、 1 、および NULL グループの1つとして、SUM(number)
3
に等しくなります (2
および1
一緒に追加され、NULL
省略されます。)
同様に、任意の数の列でグループ化できます。列名をGROUP BY
に書き込むだけです。 句を使用し、コンマで区切ります。