SQL グループ関数

概要

グループ化した複数行のデータに対して単一の値を返す関数
※単一行関数=1行のデータに対して単一の値を返す
グループ化については「SQL DML:集計」参照

※以下のグループ関数でグループ化を行う表

ID NAME DATE
1 GROUP-1 99-01-01
2 GROUP-1 99-01-01
3 GROUP-1 99-01-02
4 GROUP-1 99-01-03
5 GROUP-1 99-01-04
6 GROUP-1 99-01-05
7 GROUP-2 99-02-01
8 GROUP-2 99-02-02
9 GROUP-2 99-02-03
10 GROUP-2 99-02-04
11 GROUP-2 99-02-05
12 GROUP-2 99-02-06
一覧

関数 取得 * 数値 文字 日付
COUNT データ件数
MIN 最小
MAX 最大
AVG 平均
SUM 合計
STDDEV 標準偏差
VARANCE 母集団標準偏差

COUNT

SELECT
  COUNT(ID) AS COUNT,
  TO_CHAR(MYDATE,'YYYY/MM') AS "YYYY/MM"
FROM MYTABLE
GROUP BY TO_CHAR(MYDATE,’MM’);
COUNT YYYY/MM
-----------
6 1999/02
6 1999/01

SUM

SELECT
  SUM(ID),
  TO_CHAR(MYDATE,'YYYY/MM') AS "YYYY/MM"
FROM MYTABLE
GROUP BY TO_CHAR(MYDATE,’MM’);
SUM YYYY/MM
-----------
57 1999/02
21 1999/01

MAX/MIN

SELECT
  MAX(ID),
  MIN(ID),
  TO_CHAR(MYDATE,'YYYY/MM') AS "YYYY/MM"
FROM MYTABLE
GROUP BY TO_CHAR(MYDATE,’MM’);

MAX  MIN YYYY/MM
-----------
12  7 1999/02
66  1 1999/01

AVG

平均
SELECT
  AVG(ID) AS AVG,
  TO_CHAR(MYDATE,'YYYY/MM') AS "YYYY/MM"
FROM MYTABLE
GROUP BY TO_CHAR(MYDATE,’MM’);

AVG YYYY/MM
-----------
~ 1999/01

STDDEV

標準偏差
SELECT
  STDDEV(ID) AS STDDEV,
  TO_CHAR(MYDATE,'YYYY/MM') AS "YYYY/MM"
FROM MYTABLE
GROUP BY TO_CHAR(MYDATE,’MM’);

STDDEV YYYY/MM
-----------
~ 1999/01

全列指定(*)

全ての列で使用可能
SELECT COUNT(*)
SELECT COUNT('X')
FROM 表名
WHERE ~;

NULLの集計

データ型 NULL
MIN (列名) 数値、文字、日付 無視
MAX (列名) 数値、文字、日付 無視
COUNT (列名) 数値、文字、日付 無視 COUNT(*) :NULLが集計される
AVG (列名) 数値 無視
SUM (列名) 数値 無視

ID列:1,1,(NULL),2,2 の場合
COUNT(ALL ID) = 4
※(NULL)は集計されない
COUNT(ID) = 4
※ALLと同じ
COUNT(DISTINCT ID) = 2
COUNT(*) = 5
※(NULL)も集計する

NULLの判定/置換は「SQL 変換関数NULL値の判定・変換」参照

グループ関数が利用可能な句

・SELECT句
SELECT
 COUNT(~)
FROM ~

・HAVING句
SELECT ~ FROM ~ GROUP BY ~
HAVING COUNT(~) = ~

・ORDER BY句
SELECT ~ FROM ~
ORDER BY COUNT(~)