icon
icon

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オンライン講座の内容をもとにしています。

 

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

 

大石ゆかり

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

田島悠介

その場合、単純に集計関数を使っても出てこないので、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] プログラミング入門で挫折しない学習方法を動画で公開中

おわりに

このように、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人ずつつき、マンツーマンのメンタリングで学習をサポートし、オリジナルWebサービスを開発することが可能です。

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する