SUMは合計値を返すSQL関数です。この記事では、SUM関数の使い方をご紹介します。
DBMS | SUM |
---|---|
MySQL | ✓ |
Oracle | ✓ |
PostgreSQL | ✓ |
SQL Server | ✓ |
OracleのSUM関数は、引数に指定した式の合計値を返すグループ関数である。
SUM([ALL|DISTINCT] expr)
ALLを指定した場合は重複する値を含めて合計値を算出する。DISTINCTを指定した場合は重複する値を含めずに合計値を算出する。
SUM関数を使用したSQLのサンプルを示す。このサンプルは、社員(emp)表から給与(sal)列の合計値を選択している。
SELECT SUM(sal) FROM emp
SUM関数はNULL以外の値の合計値を返すので、レコードにNULLが混じっていても構わない。ただし、すべてのレコードがNULLだった場合、SUM関数はNULLを返す。
すべてのレコードがNULLだった場合に合計値を0としたいときは、COALESCE関数と組み合わせる。
SELECT COALESCE(SUM(sal), 0) FROM emp
特定の列をキーとしてグループ化し、各グループそれぞれの合計値を求めるには、GROUP BY 句を指定する。
SELECT deptno, SUM(sal) FROM emp GROUP BY deptno
deptno | SUM(sal) |
---|---|
1 | 280 |
2 | 520 |
3 | 120 |
データそのものはグループ化せずに、グループの合計値を求めるには、OVER 句を指定する。
SELECT ename, sal, deptno, SUM(sal) OVER (PARTITION BY deptno) FROM emp
ename | sal | deptno | SUM(sal) |
---|---|---|---|
野中ここな | 140 | 1 | 280 |
白鳥沙南 | 140 | 1 | 280 |
八木美樹 | 130 | 2 | 520 |
田中美空 | 130 | 2 | 520 |
佐藤愛桜 | 130 | 2 | 520 |
戸高美湖 | 130 | 2 | 520 |
野崎結愛 | 120 | 3 | 120 |
複数列の合計値を求めるには、それぞれの列を足し算して、その合計を求める。
SELECT SUM(price + tax) FROM example