GROUP BY によって生成された集計結果を絞り込むことができます。WHERE 句に似ていますが、WHERE は集計前に実行されるのに対し、HAVING は集計後に実行される点が異なります。
SELECT 句の集計結果は、そのエイリアスを使って HAVING 句から参照できます。さらに、HAVING 句では、クエリ結果として返されない追加の集計結果に対して絞り込みを行うこともできます。
例
次のような sales テーブルがあるとします。
CREATE TABLE sales
(
region String,
salesperson String,
amount Float64
)
ORDER BY (region, salesperson);次のようにクエリを実行できます:
SELECT
region,
salesperson,
sum(amount) AS total_sales
FROM sales
GROUP BY
region,
salesperson
HAVING total_sales > 10000
ORDER BY total_sales DESC;これにより、担当地域での総売上が10,000を超える営業担当者の一覧が表示されます。
制限事項
集計を行わない場合、HAVING は使用できません。代わりに WHERE を使用してください。