SQLでのデータ分析に欠かせない基本集計関数「SUM」「AVG」「MAX」「MIN」「COUNT」。
本記事では、scottスキーマのEMP
テーブルを使用しながら、これらの関数の仕組み、使い方、実用例、注意点を、初心者にもわかりやすく解説します。さらに、結果の可視化やよくある質問も盛り込みました。
EMP テーブルの概要
まずは今回使用するEMP
テーブルの構造を確認しましょう。
SELECT EMPNO, ENAME, JOB, SAL, COMM, DEPTNO FROM EMP;
テーブルサンプル
EMPNO | ENAME | JOB | SAL | COMM | DEPTNO |
---|---|---|---|---|---|
7369 | SMITH | CLERK | 800 | NULL | 20 |
7499 | ALLEN | SALESMAN | 1600 | 300 | 30 |
7839 | KING | PRESIDENT | 5000 | NULL | 10 |
7902 | FORD | ANALYST | 3000 | NULL | 20 |
集計関数とは?
集計関数は、指定した列のデータを一つの値にまとめるための関数です。
関数 | 説明 |
---|---|
SUM | 合計値を計算する |
AVG | 平均値を計算する |
MAX | 最大値を取得する |
MIN | 最小値を取得する |
COUNT | 行数(または値の個数)をカウントする |
1. SUM 関数 – 合計値の計算
機能
指定した列の合計値を計算します。NULL値は無視されます。
使用例: 部署ごとの合計給与
SELECT DEPTNO, SUM(SAL) AS TOTAL_SALARY
FROM EMP
GROUP BY DEPTNO;
結果の解釈
DEPTNO | TOTAL_SALARY |
---|---|
10 | 8750 |
20 | 6775 |
30 | 9400 |
- 10部門の合計給与は8750。
- NULL値は含まれないため、歩合給 (
COMM
) は集計結果に影響を与えません。
2. AVG 関数 – 平均値の計算
機能
指定列の平均値を計算します。NULL値は無視されます。
使用例: 部署ごとの平均給与
SELECT DEPTNO, AVG(SAL) AS AVG_SALARY
FROM EMP
GROUP BY DEPTNO;
結果の解釈
DEPTNO | AVG_SALARY |
---|---|
10 | 2916.67 |
20 | 2258.33 |
30 | 1566.67 |
平均値は小数点以下まで計算されるため、見やすくするには
ROUND
関数を組み合わせると良いでしょう。
3. MAX 関数 – 最大値を取得する
機能
指定列の最大値を返します。
使用例: 部署ごとの最高給与
SELECT DEPTNO, MAX(SAL) AS MAX_SALARY
FROM EMP
GROUP BY DEPTNO;
結果の解釈
DEPTNO | MAX_SALARY |
---|---|
10 | 5000 |
20 | 3000 |
30 | 2850 |
- 10部門の最大給与は、KINGが受け取る5000。
- 最大値を求めることで、リーダーや高給者の特定に役立ちます。
4. MIN 関数 – 最小値を取得する
機能
指定列の最小値を返します。
使用例: 部署ごとの最低給与
SELECT DEPTNO, MIN(SAL) AS MIN_SALARY
FROM EMP
GROUP BY DEPTNO;
結果の解釈
DEPTNO | MIN_SALARY |
---|---|
10 | 1300 |
20 | 800 |
30 | 950 |
- 最小値を把握することで、低賃金のポジションを確認できます。
5. COUNT 関数 – 行数のカウント
機能
行数または値の個数をカウントします。
使用例: 部署ごとの従業員数
SELECT DEPTNO, COUNT(*) AS EMP_COUNT
FROM EMP
GROUP BY DEPTNO;
結果の解釈
DEPTNO | EMP_COUNT |
---|---|
10 | 3 |
20 | 3 |
30 | 6 |
- 10部門の従業員数は3人。
6. 複数の集計関数を組み合わせる
課題: 部署ごとに以下の情報を取得してください:
- 合計給与
- 平均給与
- 最大給与
- 最小給与
- 従業員数
SELECT
DEPTNO,
SUM(SAL) AS TOTAL_SALARY,
AVG(SAL) AS AVG_SALARY,
MAX(SAL) AS MAX_SALARY,
MIN(SAL) AS MIN_SALARY,
COUNT(*) AS EMP_COUNT
FROM EMP
GROUP BY DEPTNO;
結果の解釈
DEPTNO | TOTAL_SALARY | AVG_SALARY | MAX_SALARY | MIN_SALARY | EMP_COUNT |
---|---|---|---|---|---|
10 | 8750 | 2916.67 | 5000 | 1300 | 3 |
20 | 6775 | 2258.33 | 3000 | 800 | 3 |
30 | 9400 | 1566.66 | 2850 | 950 | 6 |
視覚的なまとめ
以下は集計結果をグラフ化した例です(概念的なイメージとして)。
部署ごとの合計給与(棒グラフ)
10部門: ████████████ 8750
20部門: ███████████████ 10875
30部門: ████████████ 9400
注意点とベストプラクティス
NULL値の扱い
- NULL値は
SUM
,AVG
,MAX
,MIN
では無視されます。 COUNT(*)
は NULL値を含むすべての行をカウントします。
パフォーマンス最適化
- 大規模なデータセットでは、インデックスや
EXPLAIN PLAN
を活用してクエリを最適化しましょう。
FAQ
Q1: 集計関数に条件を追加できますか?
A1: はい、WHERE
や HAVING
を使用して条件付き集計が可能です。
Q2: 小数点以下の桁数を調整できますか?
A2: ROUND
関数を使用して結果を丸めることができます。例: ROUND(AVG(SAL), 2)
まとめ
本記事では、SUM, AVG, MAX, MIN, COUNT の5つの基本集計関数について、以下を解説しました:
- 各関数の役割
- 使用例と結果の解釈
- よくある注意点
これらの関数を使いこなせるようになれば、SQLでのデータ分析が一段と効率的になります!ぜひ、実際にSQLを試してみてください。
次のステップ:GROUPING
, ROLLUP
, ウィンドウ関数など、さらに高度な集計手法も学んでみましょう!
[参考]
Oracle Database SQL言語リファレンス 19c
コメント