SQL GROUP BY 文
- 前のページ SQL sum()
- 次のページ SQL Having
合計関数(例えば SUM)は、GROUP BY 文を追加する必要があります。
GROUP BY 文
GROUP BY 文は、合計関数を使用して、1つまたは複数の列に基づいて結果セットをグループ化するために使用されます。
SQL GROUP BY 文法
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name
SQL GROUP BY 例
以下の「Orders」テーブルを持っています:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
今、各クライアントの合計金額(総注文)を検索したいです。
クライアントを組み合わせるために GROUP BY 文を使用したいです。
以下の SQL 文を使用しています:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer
結果セットは以下のようになります:
Customer | SUM(OrderPrice) |
---|---|
Bush | 2000 |
Carter | 1700 |
Adams | 2000 |
素晴らしいですね、ですか?
GROUP BY を省略するとどうなるかを見てみましょう:
SELECT Customer,SUM(OrderPrice) FROM Orders
結果セットは以下のようになります:
Customer | SUM(OrderPrice) |
---|---|
Bush | 5700 |
Carter | 5700 |
Bush | 5700 |
Bush | 5700 |
Adams | 5700 |
Carter | 5700 |
上記の結果セットは必要なものではありません。
なぜその SELECT 文を使用できないのでしょうか?以下に説明します:上記の SELECT 文は2つの列(Customer と SUM(OrderPrice))を指定しています。「SUM(OrderPrice)」は1つの値(「OrderPrice」列の合計)を返しますが、「Customer」は6つの値(「Orders」テーブルの各行に対応する値)を返します。したがって、正しい結果は得られません。しかし、GROUP BY 文がこの問題を解決しましたことをご覧になりましたか?
1つ以上の列に対する GROUP BY
1つ以上の列に対して GROUP BY 文を適用することもできます。例えば、以下のようになります:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
- 前のページ SQL sum()
- 次のページ SQL Having