アナリストにとって、売上、利益、コスト、給与などのデータを要約することは重要な要素です。 データの要約は、アナリストが視覚化を作成したり、調査結果を結論付けたり、レポートを作成するのに非常に役立ちます。 SQLでは、GROUP BY句は、データシリーズを要約または集約するためのツールの1つです。 例えば、1つの四半期における毎日の売上と組み合わせを集計して、上級管理職に見せることができます。 同様に、会社の各部門に何人の従業員がいるかをカウントしたい場合も同様です。
データをグループ化した後、HAVING句を使ってグループ化されたレコードをフィルタリングすることができます。 HAVING句は、指定された条件にマッチするグループ化されたレコードを返します。 また、グループ化されたレコードをORDER BYでソートすることもできます。
このチュートリアルでは、GROUP BY句を例を挙げて詳しく説明します。 このチュートリアルで学ぶトピックは以下の通りです。
- Group By 句
- Having 句
- Aggregate 関数
- Compare Having and Where Clause in SQL
- GROUP BY With JOIN Example
- GROUP BY Comparison with other Clause
- Hands-on Practice Assignment
- Hands-on実践課題
- 結論
GROUP BY句
GROUP BY句は、類似したデータをグループにまとめるためにSQLのSELECT文で使用されます。 GROUP BY句は、いくつかの関数を使用して、単一または複数の列の複数のレコードを結合します。 一般的には、min(),max(),avg(),count(),sum()などの集約関数を使用して、単一または複数の列に結合します。
split phase
では、値によってグループを分割します。-
apply phase
では、集約関数を適用して単一の値を生成します。
combiner phase
では、単一の値を持つグループを単一の値に結合します。
Points to Remember:
- GROUP BY句はSELECT文で使用します。
- GROUP BYは、選択されたカラムに基づいて結果を集約します。
- GROUP BYは、データのグループごとに1つの結果のみを返します。
- GROUP BY句は、常にWHERE句の後に続きます。
- GROUP BY句は、常にORDER BY句の前に続きます(http://slideplayer.com/slide/15440670/)。
上記の例では、テーブルはDeptID列に基づいてグループ化され、給与は部門ごとに集計されます。
Having Clause
HAVING句は、GROUP BY句の条件付き句としてSQLで使用されます。 この条件節は、集約関数の結果が与えられた条件と一致した行のみを返します。 これは、WHERE句が集約結果と結合できないためにSQLに追加されたもので、目的が異なります。
- HAVING句は常にGROUP BY句と組み合わせて使用されます。
- HAVING句は個々のレコードではなく、グループのレコードにデータを制限します。
上記の例では、テーブルはDeptID列に基づいてグループ化され、これらのグループ化された行はAVG(Salary)> 3000という条件でHAVING句を使用してフィルタリングされています。
集約関数
集約関数は、COUNT、MAX、MIN、AVG、SUM、STDDEV、VARIANCE など、グループの結果を 1 つにまとめるために使用されます。
-
SUM()
これらの関数は、複数行の関数としても知られています。 各グループの合計を返します。 -
COUNT()
:各グループの行数を返します。 各グループの行数を返します。 -
AVG()
:各グループの平均値と平均値を返します。 -
MIN()
:各グループの平均値と平均を返します。 各グループの最小値を返します。 -
MAX()
:各グループの最小値を返します。 各グループの最小値を返します。
Compare Having and Where Clause in SQL
- 場合によっては、個々のレコードをフィルタリングする必要があります。 そのような場合には、WHERE句を使用することができます。一方、特定の条件でグループをフィルタリングする必要がある場合もあります。
- WHERE句はタプル単位でレコードをフィルタリングしますが、HAVING句はグループ全体をフィルタリングします。
- 1つのクエリにWHERE句とHAVING句の両方が含まれることがあります。
- WHERE句はGROUP BY句の前にレコードを制限するのに対し、HAVING句はGROUP BY句が実行された後にグループを制限します。
- WHERE句はSELECT、UPDATE、DELETE、INSERTで利用できますが、HAVINGはSELECT文でのみ利用できます。
GROUP BYとJOINの例
正規化されたリレーショナルデータベースは、複雑なテーブルを小さなテーブルに分割します。 これにより、データの冗長性や不整合性を排除し、情報の損失がないようにすることができます。
上の例では、EmployeeとDepartmentは共通のカラムDeptIDを使って結合されています。
上記の例では、JOINとGROUP BYの両方の句を1つのクエリで使用しています。
GROUP BYと他の句との比較
GROUP BYとDISTINCTの比較
DISTINCTはカラムに存在するユニークな値を返し、GROUP BYはユニーク/ユニークなアイテムを集約した結果のカラムを返します。 次の例では、dept
テーブルの DISTINCT 値を見ることができます。
GROUP BYとORDER BYの比較
ORDER BYは昇順と降順でソートされたアイテムを返すのに対し、GROUP BYは結果の集約カラムでユニークなアイテムを返します。 次の例では、ORDER BYまたはソートされた給与テーブルを見ることができます。
Hands-on Practice Assignment
テーブル名: 書籍
カラム名 ISBN, Title, Publication Date, Price, Publisher
以下のステートメントに対するSQLクエリを書き、コメントで答えを共有してください。
ソース。
結論
おめでとうございます!このチュートリアルを最後までやり遂げましたね!
このチュートリアルでは、GROUP BY句とHAVING句について多くの詳細を説明しました。 GROUP BY句とHAVING句とは何か、SQLのHAVING句とWHERE句の比較、JOINによるGROUP BY、GROUP BYとDISTINCTやORDER BYとの比較などを例を挙げて学びました。
願わくば、GROUP BYとHAVING句のコンセプトを利用して、ご自身のデータセットを分析できるようになっていただきたいと思います。 このチュートリアルを読んでいただきありがとうございました!
SQLについてもっと学びたい方は、DataCampのIntermediate SQLcourseを受講してみてください。