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(~)