MySQLでGROUP BYを使う方法|基礎から実例までを詳しく解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年10月)

✔当記事は以下のような方々に向けて書かれています

「MySQLのGROUP BY句の役立つ使い方を理解したい」

「MySQLのGROUP BY句の使い方について疑問を持っている」

「MySQLのGROUP BY句の実際の使用例を確認したい」

✔当記事を通して理解できる内容

  • MySQLのGROUP BY句の基本プリンシプル
  • MySQLのGROUP BY句の正確な書き方とその多様な使い方
  • MySQLのGROUP BY句の実際の例示

当記事では、MySQLのGROUP BY句の基本的な使い方から、特装なオプションを用いた応用テクニックまで、具体的な例を交えて詳細に解説します。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

GROUP BYの理解

こちらでは、「GROUP BY」についてお伝えしていきます。

「GROUP BY」について理解することで、データ分析や情報整理に役立つでしょう。

  • データのグループ化とその必要性
  • GROUP BYとその文法の基礎
  • 基本的なGROUP BYの利用例

データのグループ化とその必要性

データのグループ化は、大量のデータをカテゴリや特性ごとに整理する技術です。

例えば、売上データを月ごとや商品カテゴリごとにまとめる際に利用します。

データを分類することで、トレンドの特定や分析が容易になるのです。

GROUP BYとその文法の基礎

GROUP BYは、指定したカラムを基にデータをグループ化するSQLの命令のひとつ。

基本的な文法は以下のとおりです。

SELECT カラム名 FROM テーブル名 GROUP BY グループ化するカラム名;

この形でデータをグループ化できます。

基本的なGROUP BYの利用例

例えば、salesテーブルから商品カテゴリごとの売上数を取得する場合は以下のようになります。

SELECT product_category, COUNT(*)
FROM sales
GROUP BY product_category;

これにより、商品カテゴリごとの売上数が一覧表示されます。

GROUP BYと集約関数

「GROUP BYと集約関数」の組み合わせについて見ていきましょう。

この組み合わせを理解することで、より詳細なデータ分析が可能になります。

  • 集約関数とは何か
  • GROUP BYと集約関数の組み合わせ

集約関数とは何か

集約関数は、グループ化されたデータに対して計算する関数のことを指します。

例えば以下のようなものです。

  • SUM():合計値を出す
  • AVG():平均値を出す

これらの関数を使うことで、特定のグループのデータ合計や平均を計算できます。

GROUP BYと集約関数の組み合わせ

GROUP BYと集約関数を組み合わせることで、グループごとの合計や平均などの統計情報を取得できます。

以下は、商品カテゴリごとの平均価格を取得するものです。

SELECT product_category, AVG(price)
FROM sales
GROUP BY product_category;

集約したデータのさらなる利用

こちらでは、集約したデータをさらに高度に活用する方法について解説します。

この章の内容を理解することで、データ分析の幅が広がるでしょう。

  • 集約後のデータ取得(WITH ROLLUP)の方法
  • GROUP BYとHAVINGの組み合わせ
  • GROUP BYとORDER BYの活用法
  • GROUP BYとDISTINCTの役割

集約後のデータ取得(WITH ROLLUP)の方法

WITH ROLLUPは、部分合計や総合計を簡単に取得できるSQLの機能。

GROUP BYと組み合わせて使用します。

商品カテゴリと都市ごとの売上合計を取得のうえ、総合計も表示する例をご覧ください。

SELECT product_category, city, SUM(sales_amount)
FROM sales
GROUP BY product_category, city WITH ROLLUP;

GROUP BYとHAVINGの組み合わせ

HAVINGは、GROUP BYでの集約結果に対してさらに条件を指定する際に使用します。

以下は、商品カテゴリごとの売上合計が1,000以上のものだけを取得する例です。

SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
HAVING SUM(sales_amount) > 1000;

GROUP BYとORDER BYの活用法

GROUP BYでの集約結果を、特定の順序で表示したい場合、ORDER BYを利用します。

例として、商品カテゴリごとの売上合計を降順で表示する場合は以下のように記述します。

SELECT product_category, SUM(sales_amount)
FROM sales
GROUP BY product_category
ORDER BY SUM(sales_amount) DESC;

GROUP BYとDISTINCTの役割

DISTINCTは、重複するデータを排除して表示するSQLの機能です。

GROUP BYとは異なり、集約はおこなわない点に注意しましょう。

商品の種類を重複なくリストする場合は以下のとおりです。

SELECT DISTINCT product_category
FROM sales;

実際に試してみよう

こちらでは、具体的な練習問題を通じて、GROUP BYの活用を身につける手助けをします。

実際の操作を通じて、理解を深めましょう。

  • 練習問題:各項目ごとに集計を試す
  • 練習問題:各種SQL命令との組み合わせ

練習問題:各項目ごとに集計を試す

以下のクエリを実行し、出力結果を確認してください。

SELECT product_type, COUNT(*)
FROM products
GROUP BY product_type;

練習問題:各種SQL命令との組み合わせ

以下のクエリを実行し、出力結果を確認してください。

SELECT product_category, AVG(price)
FROM sales
GROUP BY product_category
HAVING AVG(price) > 500
ORDER BY AVG(price) DESC;

まとめ

当記事の内容をまとめます。

Group Byについて以下のような点を説明してきました。

  • 「GROUP BY」は、大量のデータを特定のカラムの値に基づきグループ化できる
  • 特定のカラムを基準にデータをグループ化し、そのグループごとの件数や合計、平均などの計算が可能
  • WITH ROLLUPで部分合計や総合計を計算、HAVINGで集約結果に対するフィルタリング、ORDER BYで集約結果を特定の順序で表示、など多岐にわたる用途でも使える

SQLの命令の中でも特にデータ分析や情報の整理に役立つ「GROUP BY」の知識は、データベースを扱う全ての者にとって必須のものと言えるでしょう。

当記事を通じて基本的な使い方や応用的な使い方を学び、日常の業務やデータ分析の際に活用してください。

常に実際のデータと向き合いながら、より効果的なクエリの書き方を追求していきましょう。

タイトルとURLをコピーしました