【SQL Server】HAVING句の使い方を徹底解説!GROUP BYとの組み合わせと実用例
SQL Server(Transact-SQL)におけるHAVING句は、GROUP BY句と組み合わせて使用し、グループ化された結果に対して条件を指定するための句です。WHERE句が個々の行を絞り込むのに対し、HAVING句は集計後のグループに対してフィルターを適用できる点が大きな特徴です。HAVING句の条件がTRUEと評価されたグループのみが、結果セットとして返されます。
HAVING句の基本構文
SELECT 式1, 式2, … 式n,
集計関数(式)
FROM テーブル名
[WHERE 条件]
GROUP BY 式1, 式2, … 式n
HAVING having条件;
各パラメータの意味
- 集計関数:SUM、COUNT、MIN、MAX、AVGなどの集計関数を指定できます。
- 式1〜式n:集計関数に含まれない式です。必ずGROUP BY句にも含める必要があります。
- WHERE 条件(省略可能):レコードを選択対象とするために満たすべき条件を指定します。
- HAVING 条件:集計結果にのみ適用される追加条件です。この条件がTRUEとなるグループだけが結果セットに返されます。
ポイント: WHERE句はグループ化の「前」に行を絞り込み、HAVING句はグループ化の「後」にグループを絞り込みます。この違いを理解しておくことが重要です。
使用例1:SUM関数を使う場合
SELECT bumon, SUM(suuryou) AS '合計数量'
FROM seihin
GROUP BY bumon
HAVING SUM(suuryou) > 100;
この例では、SUM関数を使って部門名とその部門の数量合計を取得しています。HAVING句によって、数量の合計が100より大きい部門のみが結果として返されます。
使用例2:COUNT関数を使う場合
SELECT toshi, COUNT(*) AS '従業員数'
FROM shain
WHERE state = 'California'
GROUP BY toshi
HAVING COUNT(*) > 20;
この例では、カリフォルニア州に在籍する従業員を都市ごとに集計し、都市名と従業員数を返します。HAVING句によって、従業員数が20人より多い都市のみが表示されます。ここではWHERE句で先に行を絞り込んでから、GROUP BYでグループ化し、最後にHAVING句でグループを絞り込むという流れになっています。
使用例3:MIN関数を使う場合
SELECT bumon, MIN(kyuuryou) AS '最低給与'
FROM shain
GROUP BY bumon
HAVING MIN(kyuuryou) >= 50000;
この例では、各部門の最低給与を取得しています。HAVING句によって、最低給与が50,000ドル以上の部門のみが結果として返されます。
使用例4:MAX関数を使う場合
SELECT bumon, MAX(kyuuryou) AS '最高給与'
FROM shain
GROUP BY bumon
HAVING MAX(kyuuryou) > 34000;
この最後の例では、各部門の最高給与を取得しています。HAVING句によって、最高給与が34,000ドルより大きい部門のみが結果セットに含まれます。
まとめ
HAVING句は、GROUP BY句による集計結果に対して条件を適用したい場合に不可欠な句です。SUM・COUNT・MIN・MAX・AVGなどの集計関数の結果をもとに絞り込みを行えるため、「売上合計が一定額以上の部門」「件数が多いカテゴリ」など、実務でよくある集計条件の抽出に幅広く活用できます。WHERE句との役割の違いをしっかり押さえて、適切に使い分けましょう。
-
SQL ServerのPIVOT句とは?クロス集計で行を列に変換する方法を実例付きで解説
SQL Server(Transact-SQL)では、PIVOT句を使用することで、クロス集計(ピボットテーブル)を作成できます。PIVOT句は、テーブル内の行データを列に変換し、集計結果を見やすい形式で表示するための強力な機能です。 下図は、合計値を計算し、行データを列に変換して表示する例です。 PIVOT句の基本構文 SELECT cot_dautien AS bidanh_cot_dautien, [giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n] FROM ( SELECT bang_nguon.cot1
-
MS SQL Serverとは?特徴・主な用途・バージョン履歴・インスタンスの基インスタンスの基礎を徹底解説
SQL Server(MS SQL Server)とは? SQL Serverは、Microsoftが開発したリレーショナルデータベース管理システム(RDBMS)です。従来のRDBMSの枠組みにとどまらず、オブジェクト指向の概念も取り入れたORDBMS(オブジェクトリレーショナルデータベース管理システム)としての側面も併せ持っています。主な特徴は以下の通りです。 Microsoftが開発したRDBMSベースのデータベースソフトウェアである ORDBMS(オブジェクトリレーショナルデータベース管理システム)としても機能する 特定のプラットフォームに依存しない独立した環境で動作する コマンドライ