group by での集計結果に対して条件を指定して絞り込む - having の利用

group by での集計結果に対して条件を指定して絞り込みたい場合があります。この記事では、group byを用いた集計結果を絞り込むSQLを紹介します。

例1:集計結果に対して条件を指定する

products テーブル
idmodelnamecategoryprice
1C-XM01モーダンチェアチェア56000
2X-XD05ラージデスクテーブル87000
3A-DA40ラウンドダイニングチェアチェア28000
4O-XX100ナチュラルオフィスチェア13800
5R-D400ラウンドダイニングテーブルテーブル128000
6R7000ウッドキャビネットその他32000

上記のproductsテーブルにて、categoryごとにpriceの平均値をもとめ、平均値が50000以上のcategoryを列挙します。
下記のSQLを実行します。
select category, AVG(price) as average 
  from products group by category having AVG(price) > 50000

結果

結果は以下となります。
categoryaverage
テーブル107500.000000

補足

havingを用いたくない場合は、下記のFROM句でのサブクエリ(副問い合わせ)で記述することもできます。havingに比べ効率は下がります。
select * from(
  select category, AVG(price) as average from products group by category
) as query where average > 50000

結果

結果は同じです。
categoryaverage
テーブル107500.000000

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2024-01-06
作成日: 2014-07-29
iPentec all rights reserverd.