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句は、複数のレコードからデータを収集し、一つ以上のカラムによって設定されたレコードを返すために使用されます。