MySQLでGROUP BYを使ってデータを集計する方法【初心者向け】
MySQLで【GROUP BY】を使ってデータを集計する方法を初心者向けに解説した記事です。GROUP BYを使うと、フィールドの合計値や平均値をグループ単位でわけて出力することができます。構文の書き方を実践を交えて紹介します。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
MySQLの初心者向けに、基本的な使い方を解説する記事です。
今回は、GROUP BYを使ってデータを集計する方法を紹介します。
なお本記事は、MySQLを扱うTechAcademyのPHPオンライン講座の内容をもとにしています。
今回の記事の内容は動画でもご覧いただけます。
テキストよりも動画の方が理解しやすいという場合はぜひご覧ください。
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20160620-400x400-e1517449269611.png)
田島メンター!家計簿をつけているんですけど、項目ごとの支出を計算したいんですが、どうしたらいいでしょうか?
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20163020-2-400x400-e1517449291396.png)
その場合、単純に集計関数を使っても出てこないので、gourp byを使ってグループ化するといいんだ。
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20160620-400x400-e1517449269611.png)
項目をグループとして、まとめることが出来るんですか?
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20163020-2-400x400-e1517449291396.png)
そうなんだ。例としてユーザーグループのログイン回数をグループ化して計算してみよう!
GROUP BYを使ってデータを集計する方法
selectを使うと、レコード数の集計を出したり、フィールドの合計値や平均値を出すことができます。
group byを使えば、それをさらにグループ単位でわけて出力することができ、便利です。
グループごとにデータを集計したいときは、基本の形式はこのように書きます。
select フィールド名 データの集計(データを取得したいフィールド) from テーブル名 group by フィールド名;
流れとしては、selectに続けて、まずはどのフィールドに基づいているかを書き、次にデータの集計のやり方とデータを取得したいフィールドを書きます。そして、from テーブル名 でどのテーブルからか、最後に、group by フィールド名 でどのフィールドの値に基づいてグループわけされるかを書きます。
なかなかイメージしづらいですよね。実際にやりながら見ていきましょう。
実践
今回はこのようなデータの入ったuserというテーブルを使います。
まず、5人全員分のlogin_numフィールドの合計値を出してみましょう。
select sum(login_num) from user;
78と出ました。
では次に、これをorganization_idのナンバーごとグループにわけて集計してみます。
その場合、先ほどの形式にならってこのように条件を加えます。
select organization_id, sum(login_num) from user group by organization_id;
するとこのように、organization_id1のlogin_numの合計値、organization_id2のlogin_numの合計値がそれぞれ出力されました。
おわりに
このように、group byを使うことで、グループごとにデータの集計をすることができます。
さらにMySQLの基礎をマスターしたい場合は、MySQLでALTER TABLEを使ってテーブル構造を変更する方法も合わせてご覧ください。
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20160620-400x400-e1517449269611.png)
organization_idっていうのがユーザーのグループIDって感じですかね。これをグループにして、sumで合計を出してるって感じですか?
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20163020-2-400x400-e1517449291396.png)
そうなんだ。group by フィールド名で、テーブルを切り分けることが出来るんだ。この場合、sumを使うと、organization_id別にsumが実行される感じかな。
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20160620-400x400-e1517449269611.png)
グループ化してるのは、わかるんですが内部の仕組みがわかりづらいですね。
![](https://techacademy-magazine-cdn.techacademy.jp/magazine/wp-content/uploads/2018/02/20163020-2-400x400-e1517449291396.png)
group byはselect句よりも先に実行されるんだ。なのでselectにあるsumは、group byで切り分けたテーブルに対して実行してるんだよね。group byは、SQLの仕組みがわからないと中々使いこなせないね。
MySQLを勉強していて、
・もっと効率的に勉強したい
・誰かに聞きながら学びたい
・自分でWebサービスを作りたい
と思ったことはないでしょうか?
そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、オリジナルWebサービスを開発することが可能です。
独学に限界を感じている場合はご検討ください。