>>この記事には書き直した新しいページがあります。<<
<<前 [TOP] 次>>
selectの出力を、グループに分けて整理したいことがあります。
冊数のようなものを知るには、集約関数のcountを用いればいいのですが、集約関数countがselectの出力全てを数え上げるので、それぞれのジャンル毎の数は数えてはくれません。
こうした時、group by 句を用いれば、selectの出力はグループに分けられ、集約関数はselectの全出力の上ではなく、このグループの上を走るようになります。
【例1:キーワードごとの冊数を調べる】
select keyword, count(title) from books, books2, keywords where books.id=books2.id group by keyword;
このようにgroup by 句は、selectの出力をグループに分けて、そのグループ毎に集約関数を走らせるときに使われます。
グループの選び方に何らかの条件を置きたいときには、having句を用います。
whereでの条件は、selectが行を選ぶ条件であり、「group ? having」は、こうして選びだされた行からグループを選ぶ条件を与えます。
行を選ぶwhere句には、もちろん集約関数を置くことはできませんが、グループを選ぶhaving句には、集約関数を使うことは許されています。
having句で、グループの条件をおいた例を示します。
【例2:キーワードごとの冊数を調べる】
select keyword, count(title) from books, books2, keywords where books.id=books2.id group by keyword having count(title)=11;