学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails

HSQLDBを使用したデータベース入門その7 group by句(2020年5月更新)

<<前  [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; 



「select keyword, count(title) from books, books2, keywords where books.id=books2.id group by keyword; 」
「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; 



「select keyword, count(title) from books, books2, keywords where books.id=books2.id group by keyword having count(title)=11; 」
「select keyword, count(title) from books, books2, keywords where books.id=books2.id group by keyword having count(title)=11; 」


<<前  [TOP]  次>>