SQL GROUP BY 文

合計関数(例えば 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