読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

グループ関数。HAVING GROUP BY

<スポンサーリンク>

<参考>

【オラクル認定資格試験対策書】ORACLE MASTER Bronze[11g SQL基礎?](試験番号:1Z0-051)完全詳解+精選問題集 (オラクルマスタースタディガイド)

【オラクル認定資格試験対策書】ORACLE MASTER Bronze[11g SQL基礎?](試験番号:1Z0-051)完全詳解+精選問題集 (オラクルマスタースタディガイド)

  • 作者: エディフィストラーニング株式会社西昭彦,飯室美紀,鈴木佐和,岡野友紀
  • 出版社/メーカー: ソフトバンククリエイティブ
  • 発売日: 2011/07/01
  • メディア: 単行本
  • 購入: 4人 クリック: 11回
  • この商品を含むブログ (3件) を見る

GROUP BY:行をグループ化することができる。
GROUP BYの位置はWHERE句の後ろ、ORDER BY句の前に指定する。

GROUP BYの基本構文

GROUP BY 列名[,列名]

・GROUP BYには1つ以上の列を指定する必要がある
・列別名は指定できない
・SELECT句の選択リストには「GROUP BYで指定した列」と「グループ関数」のみ指定できる
・ORDER BYとGROUP BYを併用する場合は、ORDER BY句にはGROUP BYで指定した列とグループ関数のみ指定できる

例)

SELECT deptno, COUNT(*),AVG(sal)
FROM employees
GROUP BY deptno;

deptnoでGROUP BYした場合、deptnoごとのCOUNTやAVERAGEの結果が表示される

例)

SELECT deptno, job, COUNT(*), AVG(*) 
FROM employees
GROUP BY deptno, job;

これだと、
deptnoとjobの2つをキーにしてグループ化が行われる。

グループ関数のネストは2レベルまで。3レベル以上ネストするとエラーになる。
MAX(AVG(sal))はOK
MAX(MAX(AVG(sal)))はエラー。

GROUP BYに列別名は指定できない。
ORDER BYには列別名を指定できる点に注意。


グループ関数はWHERE句の条件に指定できない。
GROUP関数を条件に指定したい場合はHAVING句を使用する。

HAVING句は必ず、WHERE句の後ろ、ORDER BY句の前に指定する。
GROUP BYとHAVINGはどりらが先でもOK。

HAVING句を使用したSELECT文の構文

SELECT 列名, グループ関数(列名)
FROM 表名
WHERE 条件
GROUP BY グループ化で使用する列のリスト
HAVING グループに対する条件
ORDER BY 並べ替えで使用する列のリスト

具体例

SELECT name, job, COUNT(*) 
FROM employees
GROUP BY job
HAVING COUNT(*) >= 2;