GROUP BY での集計結果に対して条件を指定して絞り込みたい場合があります。この記事では、GROUP BYを用いた集計結果を絞り込むSQLを紹介します。
id | model | name | category | price |
---|---|---|---|---|
1 | C-XM01 | モーダンチェア | チェア | 56000 |
2 | X-XD05 | ラージデスク | テーブル | 87000 |
3 | A-DA40 | ラウンドダイニングチェア | チェア | 28000 |
4 | O-XX100 | ナチュラルオフィス | チェア | 13800 |
5 | R-D400 | ラウンドダイニングテーブル | テーブル | 128000 |
6 | R7000 | ウッドキャビネット | その他 | 32000 |
上記のproductsテーブルにて、categoryごとにpriceの平均値をもとめ、平均値が50000以上のcategoryを列挙します。
下記のSQLを実行します。
SELECT category, AVG(price) AS average
FROM products GROUP BY category HAVING AVG(price) > 50000
結果は以下となります。
category | average |
---|---|
テーブル | 107500.000000 |
HAVING を用いたくない場合は、下記のFROM句でのサブクエリ(副問い合わせ)で記述することもできます。HAVING に比べ効率は下がります。
SELECT * from(
SELECT category, AVG(price) AS average FROM products GROUP BY category
) AS query WHERE average > 50000
結果は同じです。
category | average |
---|---|
テーブル | 107500.000000 |