【MySQL】GROUP BYとAVG()関数で同じIDを持つ行の平均値を求める方法
はじめに
MySQLで同じIDを持つ複数の行の平均値を求めたい場合は、GROUP BY句とAVG()関数を組み合わせるのが基本です。この記事では、学生IDごとに点数(マーク)の平均を計算する具体例をもとに、実行手順をわかりやすく解説します。
手順1:テーブルを作成する
まず、サンプルデータを格納するためのテーブルを作成します。
mysql> create table DemoTable
(
StudentId int,
StudentMarks int
);
Query OK, 0 rows affected (0.83 sec)
手順2:レコードを挿入する
次に、INSERTコマンドを使ってテーブルに複数のレコードを追加します。
mysql> insert into DemoTable values(1000,78); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(1001,88); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable values(1000,89); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(1000,67); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(1000,90); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable values(1001,91); Query OK, 1 row affected (0.17 sec)
手順3:テーブルの中身を確認する
SELECT文を実行して、挿入したすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、以下のような結果が出力されます。
+-----------+--------------+ | StudentId | StudentMarks | +-----------+--------------+ | 1000 | 78 | | 1001 | 88 | | 1000 | 89 | | 1000 | 67 | | 1000 | 90 | | 1001 | 91 | +-----------+--------------+ 6 rows in set (0.00 sec)
手順4:同じIDの行の平均値を求める
同じID(StudentId)ごとに行をグループ化して点数の平均を求めるには、GROUP BY句とAVG()関数を使った次のクエリを実行します。
mysql> select StudentId,avg(StudentMarks) from DemoTable group by StudentId;
実行結果は以下の通りです。
+-----------+-------------------+ | StudentId | avg(StudentMarks) | +-----------+-------------------+ | 1000 | 81.0000 | | 1001 | 89.5000 | +-----------+-------------------+ 2 rows in set (0.03 sec)
結果のポイント
- StudentId「1000」は78・89・67・90の4件が該当するため、平均は81.0000になります。
- StudentId「1001」は88・91の2件が該当するため、平均は89.5000になります。
- AVG()関数はNULL以外の値のみを対象に計算されるため、NULLが含まれる可能性のある列では注意が必要です。
まとめ
このように、MySQLではGROUP BY句でIDごとに行をまとめ、AVG()関数で平均を算出することで、同じIDを持つ行の平均値を簡単に取得できます。売上データやアクセスログなど、同一キーを持つ複数レコードを集計したい場面で非常に役立つテクニックなので、ぜひ使いこなせるようにしておきましょう。
-
MySQLのLIKE演算子とCONCAT関数を使って複数のカラムを横断して同じ値を検索する方法
MySQLでは、LIKE演算子とCONCAT()関数を組み合わせることで、複数のカラムを連結した文字列に対して部分一致検索を行うことができます。これにより、例えば「名前」と「科目」といった別々のフィールドにまたがる値を、1つの条件でまとめて検索できるようになります。ここでは、実際にテーブルを作成し、複数のカラムにわたる検索を行う手順を具体的なサンプルコードとともに解説します。サンプルテーブルの作成まず、学生名と科目を格納するテーブルを作成します。mysql> create table DemoTable-> (-> StudentName varchar(20),->
-
MySQLで同じIDの行を合計する方法:GROUP BYとHAVING句の使い方
MySQLで同じIDを持つ複数の行の値を合計したい場合、「GROUP BY」句と「HAVING」句を組み合わせて使用します。この記事では、テーブルの作成からクエリの実行まで、手順を追ってわかりやすく解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成しましょう。ここでは「id」と「price」という2つのカラムを持つシンプルなテーブルを用意します。 例 mysql> create table demo84 -> ( -> id int, -> price int -> ) -> ; Query OK,