SQL 集計関数の HAVING 句

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

ではごきげんよう、

ハーフィズ


Python における Self とは: 実際の例

Python における Self とは: 実際の例

Python における Self とは: 実際の例

RでRDSファイルを保存してロードする方法

RでRDSファイルを保存してロードする方法

R の .rds ファイルからオブジェクトを保存および読み込む方法を学習します。このブログでは、R から LuckyTemplates にオブジェクトをインポートする方法についても説明します。

最初の N 営業日の再考 – DAX コーディング言語ソリューション

最初の N 営業日の再考 – DAX コーディング言語ソリューション

この DAX コーディング言語チュートリアルでは、GENERATE 関数の使用方法とメジャー タイトルを動的に変更する方法を学びます。

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

LuckyTemplates のマルチスレッド動的ビジュアル手法を使用したインサイトのショーケース

このチュートリアルでは、マルチスレッド動的ビジュアル手法を使用して、レポート内の動的データ視覚化から洞察を作成する方法について説明します。

LuckyTemplates のフィルター コンテキストの概要

LuckyTemplates のフィルター コンテキストの概要

この記事では、フィルター コンテキストについて説明します。フィルター コンテキストは、LuckyTemplates ユーザーが最初に学習する必要がある主要なトピックの 1 つです。

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Online Service でアプリを使用する際の最良のヒント

LuckyTemplates Apps オンライン サービスが、さまざまなソースから生成されたさまざまなレポートや分析情報の管理にどのように役立つかを示したいと思います。

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

時間の経過に伴う利益率の変化を分析する – LuckyTemplates と DAX を使用した分析

LuckyTemplates でのメジャー分岐や DAX 数式の結合などの手法を使用して、利益率の変化を計算する方法を学びます。

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

DAX Studio でのデータ キャッシュのマテリアライゼーションのアイデア

このチュートリアルでは、データ キャッシュの具体化のアイデアと、それが結果を提供する際の DAX のパフォーマンスにどのように影響するかについて説明します。

LuckyTemplates を使用したビジネス レポート

LuckyTemplates を使用したビジネス レポート

これまで Excel を使用している場合は、ビジネス レポートのニーズに合わせて LuckyTemplates の使用を開始するのに最適な時期です。

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて

LuckyTemplates ゲートウェイとは何ですか? 知っておくべきことすべて