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