MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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ごとにレコードを集計し、平均値を簡単に求めることができます。売上データや在庫データの集計など、日常的なデータ分析でも頻繁に使われる基本テクニックなので、ぜひ覚えておきましょう。

  1. 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

  2. MySQLで重複するIDごとに最小値を取得する方法|MIN関数とGROUP BYの実例解説

    MySQLでは、重複するIDが存在するテーブルから各IDに対応する列の最小値を取得したいケースがよくあります。例えば、同じ商品IDに対して複数の価格(float型)が登録されている場合などです。そんなときは、GROUP BY句とMIN()関数を組み合わせることで簡単に実現できます。基本構文重複IDごとの最小値を取得するには、以下のような構文を使用します。select min(対象カラム名) from テーブル名 group by グループ化するカラム名;サンプルテーブルの作成実際に動作を確認するため、まずはテーブルを作成しましょう。mysql> create table DemoTabl