MySQLで重複する製品IDごとにレコードの平均(製品価格)を求める方法
MySQLで重複している製品ID(ProductId)ごとに、対応するレコードの平均値(製品価格)を求めたい場合は、平均を計算するAVG()関数と、同じ値を持つレコードをグループ化するGROUP BY句を組み合わせて使用します。
この記事では、テーブルの作成からデータの挿入、そしてグループごとの平均値を取得するまでの手順を、サンプルコード付きで順番に解説します。
1. テーブルを作成する
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable1490 -> ( -> ProductId varchar(20), -> ProductPrice int -> ); Query OK, 0 rows affected (0.43 sec)
2. レコードを挿入する
insertコマンドを使ってテーブルにレコードを挿入します。ここでは、意図的に同じProductIdを持つレコードを含めています。
mysql> insert into DemoTable1490 values('PRODUCT_100',700);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1490 values('PRODUCT_200',500);
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable1490 values('PRODUCT_200',1000);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1490 values('PRODUCT_100',1300);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1490 values('PRODUCT_200',300);
Query OK, 1 row affected (0.14 sec)
3. テーブルの内容を確認する
selectステートメントで、テーブル内のすべてのレコードを表示してみます。
mysql> select * from DemoTable1490;
実行すると、以下のような出力が得られます。
+-------------+--------------+ | ProductId | ProductPrice | +-------------+--------------+ | PRODUCT_100 | 700 | | PRODUCT_200 | 500 | | PRODUCT_200 | 1000 | | PRODUCT_100 | 1300 | | PRODUCT_200 | 300 | +-------------+--------------+ 5 rows in set (0.00 sec)
PRODUCT_100とPRODUCT_200がそれぞれ複数回登録されていることが確認できます。
4. 製品IDごとの平均価格を求めるクエリ
それでは本題です。AVG()関数でProductPriceの平均を計算し、GROUP BY句でProductIdごとにレコードをまとめます。
mysql> select ProductId,avg(ProductPrice) from DemoTable1490 -> group by ProductId;
実行結果は以下の通りです。
+-------------+-------------------+ | ProductId | avg(ProductPrice) | +-------------+-------------------+ | PRODUCT_100 | 1000.0000 | | PRODUCT_200 | 600.0000 | +-------------+-------------------+ 2 rows in set (0.03 sec)
結果の検証
計算が正しいか手動でも確認してみましょう。
- PRODUCT_100:(700 + 1300) ÷ 2 = 1000.0000
- PRODUCT_200:(500 + 1000 + 300) ÷ 3 = 600.0000
補足:小数点以下を丸めたい場合
AVG()の結果はデフォルトで小数第4位まで表示されます。表示を見やすくしたい場合は、ROUND()関数を組み合わせると便利です。
mysql> select ProductId, round(avg(ProductPrice)) as AveragePrice -> from DemoTable1490 group by ProductId;
このように、AVG()とGROUP BYを組み合わせるだけで、重複するIDごとにレコードを集計し、平均値を簡単に求めることができます。売上データや在庫データの集計など、日常的なデータ分析でも頻繁に使われる基本テクニックなので、ぜひ覚えておきましょう。
-
MySQLで重複するIDごとに最大金額を表示する方法(MAX()とGROUP BYの使い方)
はじめに重複しているID(この例では顧客ID)ごとに最大の金額を表示したい場合、MAX()関数とGROUP BY句を組み合わせることで簡単に実現できます。この記事では、サンプルテーブルを作成し、実際にクエリを実行しながら手順を詳しく解説します。1. サンプルテーブルを作成するまず、顧客IDと金額を持つテーブルを作成します。mysql> create table DemoTable2003( CustomerId int, Amount int);Query OK, 0 rows affected
-
MySQLで重複するIDごとに最小値を取得する方法|MIN関数とGROUP BYの実例解説
MySQLでは、重複するIDが存在するテーブルから各IDに対応する列の最小値を取得したいケースがよくあります。例えば、同じ商品IDに対して複数の価格(float型)が登録されている場合などです。そんなときは、GROUP BY句とMIN()関数を組み合わせることで簡単に実現できます。基本構文重複IDごとの最小値を取得するには、以下のような構文を使用します。select min(対象カラム名) from テーブル名 group by グループ化するカラム名;サンプルテーブルの作成実際に動作を確認するため、まずはテーブルを作成しましょう。mysql> create table DemoTabl