問題:
いくつかの統計を数えることができるように、データを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に書き込むだけです。 句を使用し、コンマで区切ります。