Previous: 出力のグループ分け
Up: 出力のグループ分け
Next: group by 句 でのリスト指定
Previous Page: 出力のグループ分け

group by句

selectの出力を、グループに分けて整理したいことがある。 つぎのような例を考えて見よう。この例は、この図書館にある、「岩波書店」の本を、 ジャンルとともに表示するものである。

例 56: 「岩波書店」で出版された図書とそのジャンル(分類名)

select 分類名,書名 
	from   分類コード一覧 , 分類一覧 , 書籍台帳 , 出版社一覧
	where  分類コード一覧.分類コード = 分類一覧.分類コード
	  and  分類一覧.マークナンバー   = 書籍台帳.マークナンバー
	  and  書籍台帳.出版社コード     = 出版社一覧.出版社コード
	  and  出版社一覧.出版社         = '岩波書店'

この出力から、ジャンルごとに何冊の本があるかを知るのは、結構、手間がかかる。先 に見た order by 句で、分類名について整列すれば、少しは数え易くはなるのだが、 それにしても大変である。冊数を知るには、普通なら、集約関数のcountを使えればい いのだが、問題は、countは、selectの出力全てを数え上げるので、それぞれのジャン ル毎の数は数えてはくれないことである。

こうした時、group by 句を用いれば、selectの出力は、グループに分けられ、しかも、 集約関数は、selectの全出力の上ではなく、このグループの上を走るようになる。

例 57: 「岩波書店」で出版された図書のジャンル毎の数

select 分類名,count(書名) 
	from   分類コード一覧 , 分類一覧 , 書籍台帳 , 出版社一覧
	where  分類コード一覧.分類コード = 分類一覧.分類コード
	  and  分類一覧.マークナンバー   = 書籍台帳.マークナンバー
	  and  書籍台帳.出版社コード     = 出版社一覧.出版社コード
	  and  出版社一覧.出版社         = '岩波書店' 
	group by 分類名

このように、group by 句は、selectの出力をグループに分けて、そのグループ毎に 集約関数を走らせるときに使われる。

maruyama@wakhok.ac.jp
1995年02月10日 (金) 00時49分16秒 JST