MySQLでGROUP BYを使ってデータを集計する方法【初心者向け】

MySQLで【GROUP BY】を使ってデータを集計する方法を初心者向けに解説した記事です。GROUP BYを使うと、フィールドの合計値や平均値をグループ単位でわけて出力することができます。構文の書き方を実践を交えて紹介します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が1,000以上あります。

MySQLの初心者向けに、基本的な使い方を解説する記事です。

今回は、GROUP BYを使ってデータを集計する方法を紹介します。

なお本記事は、MySQLを扱うTechAcademyのPHPオンライン講座の内容をもとにしています。

 

今回の記事の内容は動画でもご覧いただけます。
テキストよりも動画の方が理解しやすいという場合はぜひご覧ください。

 

大石ゆかり

田島メンター!家計簿をつけているんですけど、項目ごとの支出を計算したいんですが、どうしたらいいでしょうか?

田島悠介

その場合、単純に集計関数を使っても出てこないので、gourp byを使ってグループ化するといいんだ。

大石ゆかり

項目をグループとして、まとめることが出来るんですか?

田島悠介

そうなんだ。例としてユーザーグループのログイン回数をグループ化して計算してみよう!

 

GROUP BYを使ってデータを集計する方法

selectを使うと、レコード数の集計を出したり、フィールドの合計値平均値を出すことができます。

group byを使えば、それをさらにグループ単位でわけて出力することができ、便利です。

 

グループごとにデータを集計したいときは、基本の形式はこのように書きます。

 

select フィールド名 データの集計(データを取得したいフィールド) from テーブル名 group by フィールド名;

 

流れとしては、selectに続けて、まずはどのフィールドに基づいているかを書き、次にデータの集計のやり方データを取得したいフィールドを書きます。そして、from テーブル名 でどのテーブルからか、最後に、group by フィールド名 でどのフィールドの値に基づいてグループわけされるかを書きます。

 

なかなかイメージしづらいですよね。実際にやりながら見ていきましょう。

 

 

実践

今回はこのようなデータの入ったuserというテーブルを使います。

スクリーンショット 2015-01-19 20.05.55

 

まず、5人全員分のlogin_numフィールドの合計値を出してみましょう。

select sum(login_num) from user;

select sum(login_num) from user;2

78と出ました。

 

では次に、これをorganization_idのナンバーごとグループにわけて集計してみます。

 

その場合、先ほどの形式にならってこのように条件を加えます。

select organization_id, sum(login_num) from user group by organization_id;

するとこのように、organization_id1のlogin_numの合計値、organization_id2のlogin_numの合計値がそれぞれ出力されました。

select organization_id, sum(login_num) from user group by organization_id;

 

[PR] MySQLで挫折しない学習方法を動画で公開中

おわりに

このように、group byを使うことで、グループごとにデータの集計をすることができます。

さらにMySQLの基礎をマスターしたい場合は、MySQLでALTER TABLEを使ってテーブル構造を変更する方法も合わせてご覧ください。

 

大石ゆかり

organization_idっていうのがユーザーのグループIDって感じですかね。これをグループにして、sumで合計を出してるって感じですか?

田島悠介

そうなんだ。group by フィールド名で、テーブルを切り分けることが出来るんだ。この場合、sumを使うと、organization_id別にsumが実行される感じかな。

大石ゆかり

グループ化してるのは、わかるんですが内部の仕組みがわかりづらいですね。

田島悠介

group byはselect句よりも先に実行されるんだ。なのでselectにあるsumは、group byで切り分けたテーブルに対して実行してるんだよね。group byは、SQLの仕組みがわからないと中々使いこなせないね。

 

MySQLを勉強していて、
・もっと効率的に勉強したい
・誰かに聞きながら学びたい
・自分でWebサービスを作りたい
と思ったことはないでしょうか?

そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

独学に限界を感じている場合はご検討ください。