🐬
ORACLE MASTER Silver SQL 独習第6章
はじめに
この記事は、資格「ORACLE MASTER Silver SQL」を取得するために、オラクル認定資格試験学習書の「オラクルマスター教科書 Silver SQL Oracle Datavase SQL」を用いて学習したことをまとめています。主に各章の知識のまとめ、備忘録目的で記載していますのであらかじめご了承ください。
【リンク紹介】
・【一覧】ORACLE MASTER Silver SQL 独習
・これまで書いたシリーズ記事一覧
定義
SUMファンクション
合計をもとめる。
例1
-- employment表のsalary列の合計を求める
SELECT
SUM(employment)
FROM
salary;
例2
-- employment表のsalary列のうち、job列が'SALESMAN'である行の合計を求める。
SELECT
SUM(employment)
FROM
salary
WHERE
job = 'SALESMAN';
単一行ファンクションで処理された値を集計ファンクションで集計する。
例3
-- table1表のnumber列の小数点を取り除いたものの合計を求める。
SELECT
SUM(ROUND(n))
FROM
table1;
AVG, MAX, MINファンクション
AVG:平均値を求める。
MAX:最大値を求める。
MIN:最小値を求める。
例
-- employment表のsalary列の平均値、最大値、最小値をそれぞれ求める。
SELECT
AVG(salary),
MAX(salary),
MIN(salary)
FROM
employment
なお、日時データ型や文字データ型などの数値型以外のデータ型に対しても使用できる。
COUNT(*)ファンクション
表の行数を数える。通常集計ファンクション(複数件のデータを集計するためのファンクション)の引数に指定した列にNULLが含まれる場合、NULLは集計しないが、引数に「*」を指定した場合は、NULLも対象に含める。
例1
-- employment表の行数を数える。
SELECT
COUNT(*)
FROM
employment;
DISTINCT
集計ファンクションの列名にDISTINCTを指定すると、重複データを取り除いて集計する。
列
-- employment表のsalary列のうち、job列が'SALESMAN'である行の平均を求める。
-- ただし、重複したものを除く。
SELECT
AVG(DISTINCT salary)
FROM
employment
WHERE
job = 'SALESMAN';
GROUP BY句
ある列の値に従い、データをグループ分けして、それぞれのグループごとに集計を行う。
例1
-- employment表のjob列の種類ごとにカウントする。
SELECT
job,
COUNT(*)
FROM
employment
GROUP BY
job;
例2
-- employment表からdeptno(部門番号)列の種類, job列の種類別にsalary列の最大値を求める。
SELECT
deptno,
job,
MAX(salary)
FROM
employment
GROUP BY
deptno,
job;
GROUP BY句を用いてグループごとに集計したデータを、さらに集計ファンクションで処理することができる。
例3
SELECT
MAX(AVG(salary))
FROM
employment
GROUP BY
deptno;
WHERE句
WHERE句でデータを絞り込んだ後にGROUP BY句を使ってグループごとの集計を行うこともできる。
例
SELECT
job,
COUNT(*)
FROM
emp
WHERE
salary > 700
GROUP BY
job;
HAVING句
GROUP BY句によるグループごとの集計の後に、データを絞り込むことができる。
例
SELECT
job,
COUNT(*)
FROM
employment
GROUP BY
job
HAVING
COUNT(*) > 1;
ご協力のほどよろしくお願いします。
Discussion