SQL 集計関数の HAVING 句

このチュートリアルでは、SQL 集計関数で HAVING 句を使用または実行するいくつかの方法について説明しますSQL 集計関数でこの句を使用すると、データの要約に非常に役立ちます。

HAVING句はWHERE文とほぼ同じで、WHERE文と一緒に実行することもできます。

このチュートリアルを進めながら、例を示しながらそれらの相関関係と相違点について説明します。

目次

SQL の GROUP BY および WHERE ステートメント

最初の例では、以下のサンプル テーブルを使用してWHERE 句GROUP BY を実行する方法について説明します。WHERE句は既存の列でのみ使用でき、集計関数だけでは使用できないことに注意してください。

SQL 集計関数の HAVING 句

値が2より大きいSaleAmount列に基づいて製品の合計売上高を取得したいとします。結果を取得するには、コマンドは次のようにする必要があります。

SQL 集計関数の HAVING 句

まず、 ProductNameを選択し、SaleAmount を集計して TotalSalesを取得します。 

SQL 集計関数の HAVING 句

次に、 SaleAmountが2より大きい製品のみを取得しようとしているため、ここではWHEREステートメントを使用します。コマンド'GROUP BY ProductName' は、ProductNameの下の行を 1 つにグループ化することを示します。

一連のコマンドを実行すると、 ProductName 列SaleAmountすべてのデータのうち 電球とファンのみが表示されていることがわかります。これは、 SaleAmount が2より大きい唯一の企業だったためです

SQL 集計関数の HAVING 句

この例では、WHEREステートメントは、既存の列 ( SaleAmount )で結果をフィルタリングするためのものです。また、WHEREステートメントはGROUP BYの前に出現し、集計関数のフィルターには使用できないことに注意してください。一方、HAVING句はGROUP BYの後に出現し、集計関数に基づくフィルタリングに使用されます。 

SQL の GROUP BY および HAVING 句

この例では、 WHEREステートメントとHAVING句の違いを示します。結果を比較して評価できるように、前の例と同じ目標を使用します。 

まず、以下のコマンドを使用して、製品とその合計売上高を表示してみましょう。ご覧のとおり、最初のコマンドは、 WHEREステートメントを実行する最初のコマンドと同じです。

SQL 集計関数の HAVING 句

最初の 2 つのコマンドを実行すると、次の結果が得られます。

SQL 集計関数の HAVING 句

ここで、総売上高が 5 を超える製品のみを表示したいとします。WHEREステートメント は既存の列でのみ使用できるため、使用できません。したがって、集計関数からフィルタリングするため、  HAVING句を使用する必要があります。

SQL 集計関数の HAVING 句

GROUP BYの前に使用されるWHEREステートメントとは異なり、 GROUP BY の後にHAVING句を使用する方法に注目してくださいこれは、SQL がHAVING句を評価する前にレコードをグループ化するためです。 

次に、これらのコマンドをHAVING SUM(SaleAmount)>5とともに実行してみましょう。合計価格が5を超える製品のみを取得することを指定すると、現在の結果テーブルにペンが表示されなくなっていることがわかります。これは、合計が5未満であるためです。 

SQL 集計関数の HAVING 句

簡単に言うと、既存の列に基づいてテーブルのデータをフィルタリングする場合はWHERE 句を使用し、集計関数からデータをフィルタリングする場合はHAVING 句を使用します。 

SQL Server Management Studio (SSMS) の HAVING 句と WHERE 句

次に、 SQL Server Management Studio (SSMS)でHAVING 句を実行する方法について説明し、デモを進めていきます。また、例を示しながら、 HAVING 句WHERE 句の違いについても説明します。

以下にサンプル データSalesOrderHeader を示します。このデータは100 行で構成されます。この例では、TotalSale が10000 より大きいCustomerIDによってTotalSale取得 したいと考えています。売上合計はTotalDue列の値の合計に基づいていることに注意してください。

SQL 集計関数の HAVING 句

まず、上記の例に基づいて、集計関数でフィルタリングする場合に WHERE 句を使用できない理由を説明します。

以下の画像のコマンドのサンプル セットを使用します。ご覧のとおり、技術的には最初の例で使用したものと同じ一連のコマンドがあります。

ただし、左上隅にある[実行]をクリックすると、エラーが発生します。これは、集計関数でフィルタリングするときにWHERE句を単独で使用できないためです。

SQL 集計関数の HAVING 句

エラーを修正するには、WHERE句の代わりにHAVING句を使用して結果をフィルタリングする必要があります。新しいコマンド セットは、以下の画像のようになります。

SQL 集計関数の HAVING 句

これで、エラーが修正され、 TotalSale が10000を超えるCustomerIDごとの結果が含まれていることがわかります。

繰り返しますが、WHERE 句は常にGROUP BY 句の前に使用され、HAVING 句は常にGROUP BY 句の後に使用されます。

SQL での HAVING 句と WHERE 句の両方の使用  

この例では、 WHERE 句HAVING 句を同時に使用するとします。TotalSaleが10000より大きいCustomerIDによるTotalSale取得してみます。ただし、TerritoryIDが1に等しい顧客のみを対象とします。 

TerritoryIDとして 1 を持つ顧客の結果をフィルターしたいため、WHERE 句を使用しますしたがって、コマンドは前のコマンドと同じである必要があります。ここでも、GROUP BY 句の前にWHERE 句を追加しました

SQL 集計関数の HAVING 句

今のところ、以前の結果と今回の新しい結果の間に大きな違いは見られません。ただし、右下隅をよく見ると、以前は505 行のデータがあったのに対し、現在は64 行しかありません。これは、結果がTerritoryIDにも基づいてフィルタリングされるためです。

結論

要約すると、 WHERE句は既存の列でのみ使用できます。集約関数でフィルタリングする必要がある場合は、代わりにHAVING句を使用する必要があります。

SQL 集計関数でHAVING句を使用し、 HAVING句とWHERE句を一緒に実行する方法を実践すると、大量のデータまたはレコードを操作するときにユーザーが便利になります。 

SQL 集計関数でのHAVING句の使用方法について、十分な情報と理解を提供できたことを幸いです。このトピックやその他の関連コンテンツについて詳しく知りたい場合は、以下の関連リンクのリストをご覧ください。

ではごきげんよう、

ハーフィズ

Leave a Comment

Power Automate の文字列関数: Substring と IndexOf

Power Automate の文字列関数: Substring と IndexOf

Microsoft フローで使用できる 2 つの複雑な Power Automate String 関数、substring 関数とindexOf 関数を簡単に学習します。

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates ツールチップを使用すると、より多くの情報を 1 つのレポート ページに圧縮できます。効果的な視覚化の手法を学ぶことができます。

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を作成し、データを受信する方法を学んでいます。

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で簡単に日付テーブルを作成する方法について学びましょう。データの分析と視覚化のための効果的なツールとして活用できます。

2 つの方法による SharePoint 列の検証

2 つの方法による SharePoint 列の検証

SharePoint 列の検証の数式を使用して、ユーザーからの入力を制限および検証する方法を学びます。

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel ファイルおよび CSV ファイルにエクスポートする方法を学び、さまざまな状況に最適なエクスポート方法を決定できるようにします。

Power Automate のオンプレミス データ ゲートウェイ

Power Automate のオンプレミス データ ゲートウェイ

ユーザーがコンピューターから離れているときに、オンプレミス データ ゲートウェイを使用して Power Automate がデスクトップ アプリケーションにアクセスできるようにする方法を説明します。

DAX 数式での LASTNONBLANK の使用

DAX 数式での LASTNONBLANK の使用

DAX 数式で LASTNONBLANK 関数を使用して、データ分析の深い洞察を得る方法を学びます。

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

LuckyTemplates で予算分析とレポートを実行しながら、CROSSJOIN 関数を使用して 2 つのデータ テーブルをバインドする方法を学びます。

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

このチュートリアルでは、LuckyTemplates TREATAS を使用して数式内に仮想リレーションシップを作成する方法を説明します。