トップページに戻る    次の豆知識へ    前の豆知識へ

豆知識10 group by句


Joe Celko氏の著書[SQLパズル]より引用

SQLでのgroup by句は、
select文の特別な種類といっただけのものではありません。

group by句は、集合を重複のない空でない部分集合に分割します。
そして、グループ化されたスカラー値を使って、
それぞれの集合を一行に集約します。

グループ化された値には、定数、集計関数、および、これらの値から導かれる式があります。
つまり、グループ化された行は、
グループに関する情報を持っているのであって、
テーブル内の個々の行の情報を持っているわけではありません。


マニュアルより引用 GROUP BY句を含む問合せでは、SELECT構文のリストの要素は、 集計ファンクション、GROUP BY式、定数またはこれらのいずれかを含む式になります マニュアルより引用(英語) In a query containing a GROUP BY clause, the elements of the select list can be aggregate functions, GROUP BY expressions, constants, or expressions involving one of these.
--■■■当然これはエラー■■■ select sum(EMPNO),(select max(b.EMPNO) from emp b where b.EMPName = a.EMPName) from emp a group by EMPNO; --■■■実際にはこれもダメ■■■ select sum(EMPNO),(select max(b.EMPNO) from emp b where b.EMPName = max(a.EMPName)) from emp a group by EMPNO; --■■■これは非相関で定数を返すのでOK■■■ select sum(EMPNO),(select max(b.EMPNO) from emp b) from emp a group by EMPNO; --■■■これは相関だけど、a.EMPNOはgroup byで指定していて、■■■ --■■■GROUP BY式を使っての、定数の作成と扱われるのでOK ■■■ select sum(EMPNO),(select max(b.EMPNO) from emp b where b.EMPNO = a.EMPNO) from emp a group by EMPNO;