Articles

SQL GROUP BYおよびHAVING句の例

SQL Group by句とは何ですか?

GROUP BY句は、同じ値を持つ行をグループ化するために使用されるSQLコマンドです。 GROUP BY句はSELECT文で使用されます。 任意であるとの併用に集計機能を要約レポートからのデータベースです。

これは、データベースからのデータを要約するものです。

GROUP BY句を含むクエリはグループ化クエリと呼ばれ、グループ化されたすべての項目に対して単一の行のみを返します。,

SQL GROUP BY構文

SQL GROUP BY句が何であるかがわかったので、基本的なgroup byクエリの構文を見てみましょう。

SELECT statements... GROUP BY column_name1 ;

HERE

  • “SELECTステートメント。..”は、標準のSQL SELECTコマンドクエリです。
  • “GROUP BY column_name1″は、column_name1に基づいてグループ化を実行する句です。
  • “”はオプションで、複数の列に対してグループ化が行われたときに他の列名を表します。
  • “”は省略可能で、GROUP BY句の影響を受ける行を制限するために使用されます。, これはWHERE句に似ています。

単一の列を使用したグループ化

SQL Group By句の効果を理解しやすくするために、membersテーブルからすべての性別エントリを返す単純なクエリを実行し

SELECT `gender` FROM `members` ;

gender

Female


Female


Male


Female


Male


Male


Male


Male


Male


性別の一意の値を取得したいとします。 私たちは、次のクエリを使用することができます-

SELECT `gender` FROM `members` GROUP BY `gender`;

Myflixdbに対してMySQL workbenchで上記のスクリプトを実行すると、次の結果が得られます。,


gender

Female


Male


返された結果は二つだけです。 これは、男性と女性の二つの性別のタイプしかないからです。 SQLのGROUP BY句は、すべての”男性”メンバーをグループ化し、それに対して単一の行のみを返しました。 それは”女性”のメンバーと同じことをしました。

複数の列を使用したグループ化

映画category_idとそれらがリリースされた対応する年のリストを取得したいとします。,

この単純なクエリの出力を観察してみましょう

SELECT `category_id`,`year_released` FROM `movies` ;
category_id year_released
1 2011
2 2008
NULL 2008
NULL 2010
8 2007
6 2007
6 2007
8 2005
NULL 2012
7 1920
8 NULL
8 1920

上記の結果には多くの重複があります。

sqlでgroup byを使用して同じクエリを実行しましょう-

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

myflixdbに対してMySQL workbenchで上記のスクリプトを実行すると、以下の結果が得られます。

category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

GROUP BY句は、上記の例で一意の行を識別するために、カテゴリidとリリースされた年の両方で動作します。,

カテゴリidが同じで、リリースされた年が異なる場合、行は一意の行として扱われます。カテゴリidとリリースされた年が複数の行で同じである場合、それは重複していると見なされ、一つの行のみが表示されます。

グループ化および集計関数

データベース内の男性と女性の総数が必要であるとします。 これを行うには、以下に示す次のスクリプトを使用できます。

SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;

myflixdbに対してMySQL workbenchで上記のスクリプトを実行すると、次の結果が得られます。,

gender COUNT('membership_number')
Female 3
Male 5

以下に示す結果は、投稿された一意の性別値ごとにグループ化され、グループ化された行数はCOUNT集計関数を使用してカウントされます。

HAVING句を使用したクエリ結果の制限

特定のテーブル内のすべてのデータに対してグループ化を実行するとは限りません。 結果を特定の基準に制限したい場合があります。 このような場合、HAVING句を使用できます

映画カテゴリid8のすべてのリリース年を知りたいとします。, 結果を得るには、次のスクリプトを使用します。

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Myflixdbに対してMySQL workbenchで上記のスクリプトを実行すると、以下の結果が得られます。

movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

注意カテゴリidが8の映画のみがGROUP BY句の影響を受けています。

Summary

  • GROUP BY句SQLは、同じ値を持つ行をグループ化するために使用されます。
  • GROUP BY句は、SQL SELECT文とともに使用されます。,GROUP BY句で使用されるSELECT文は、カラム名、集計関数、定数、および式のみを含めて使用できます。
  • SQL Having句は、GROUP BY句によって返される結果を制限するために使用されます。
  • MYSQL GROUP BY句は、複数のレコードからデータを収集し、一つ以上のカラムによって設定されたレコードを返すために使用されます。