Oracle 合計を計算する 集約関数「SUM」

スポンサーリンク
スポンサーリンク

合計を計算する 集約関数「SUM」

集約関数の「SUM」を使うと、合計値を計算することができます。

集約関数「SUM」の基本構文

「ALL」と「DISTINCT」はオプションで、省略可能です。
省略した場合は、デフォルトの「ALL」となります。

「DISTINCT」は重複行を除いてくれます。

SUM([ALL | DISTINCT] <式>)

検証用のテーブルとデータの用意

以下のテーブルとデータを使用して検証を行っていきましょう。

TEST_TABLE
id year month sales
001 2019 1 100
002 2019 1 200
003 2019 2 200
004 2019 2 NULL
SQL> CREATE TABLE test_table
  2  (
  3      id     VARCHAR2(3)
  4      ,year  NUMBER
  5      ,month NUMBER
  6      ,sales NUMBER
  7  );

表が作成されました。

SQL> INSERT ALL
  2  INTO test_table VALUES('001', '2019', '1' , '100')
  3  INTO test_table VALUES('002', '2019', '1' , '200')
  4  INTO test_table VALUES('003', '2019', '2' , '200')
  5  INTO test_table VALUES('004', '2019', '2' , NULL)
  6  SELECT * FROM dual;

4行が作成されました。

INSERT文の書き方が少し特殊ですが、複数行INSERTっていう記述の仕方をしています。気になるかたは別に記事書いているので構文とか確認してみてください。
複数行INSERTの構文について

集約関数「SUM」の使用例

「TEST_TABLE」の売上「sales」列を合計して計算してみましょう。

ここで注目してほしいのが「NULL」の取り扱いです。
「NULL」は集計関数を使用する際にすべて除外されて計算されます。
※数字の「0」とも扱いが違います。計算から除外されるということを覚えておきましょう!

SQL> SELECT SUM(sales) FROM test_table;

SUM(SALES)
----------
       500

「DISTINCT」キーワードを使用して重複行を除外した場合、以下のように「200」が重複するため合計値が変わります。

SQL> SELECT SUM(distinct sales) FROM test_table;

SUM(DISTINCTSALES)
------------------
               300

コメント

タイトルとURLをコピーしました