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

MySQLで重複するVARCHAR値ごとに平均値を求める方法

MySQLでは、GROUP BY句AVG関数を組み合わせることで、重複するVARCHAR型の値ごとに数値列の平均値を簡単に求めることができます。ここでは、実際の例を通してその手順をわかりやすく解説します。

テーブルの作成

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable(
    Value int,
    Value2 varchar(100)
);
Query OK, 0 rows affected (0.84 sec)

レコードの挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。ここでは、意図的に同じVARCHAR値を持つ行を含めています。

mysql> insert into DemoTable values(10,'999.999.999.999');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(20,'888.888.888.888');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values(30,'999.999.999.999');
Query OK, 1 row affected (0.09 sec)

テーブルの内容を確認

SELECTステートメントで、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

以下のような出力が得られます。

+-------+-----------------+
| Value | Value2          |
+-------+-----------------+
| 10    | 999.999.999.999 |
| 20    | 888.888.888.888 |
| 30    | 999.999.999.999 |
+-------+-----------------+
3 rows in set (0.00 sec)

VARCHAR値ごとに平均を求めるクエリ

対応するVARCHAR値に基づいて平均を求めるには、GROUP BY句とAVG関数を組み合わせた以下のクエリを使用します。

mysql> select Value2,avg(Value) from DemoTable group by Value2;

実行結果は以下の通りです。

+-----------------+------------+
| Value2          | avg(Value) |
+-----------------+------------+
| 999.999.999.999 | 20.0000    |
| 888.888.888.888 | 20.0000    |
+-----------------+------------+
2 rows in set (0.06 sec)

結果の解説

上記の結果から、「999.999.999.999」の平均値は (10 + 30) ÷ 2 = 20.0000、「888.888.888.888」の平均値も 20.0000 であることがわかります。

このように、GROUP BY句を使えば重複する文字列値をキーとしてグループ化し、それぞれのグループにおける数値列の平均を一括で集計できます。ログデータやIPアドレスごとの統計集計など、実務でも幅広く活用できるテクニックです。

  1. MySQLで重複するタプルを検出してカウントを表示する方法

    MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入

  2. MySQLで重複する列の値を検索して表示する方法(GROUP BY HAVING句の使い方)

    MySQLでテーブル内の重複データを検索したい場面は多くあります。例えば、登録データの重複チェックやデータクレンジングなどが挙げられます。このような場合には、GROUP BY句とHAVING句を組み合わせることで、簡単に重複する列の値を抽出できます。 重複検出の基本的な考え方 GROUP BY句で列の値ごとにレコードをグループ化し、HAVING句で「同じ値が2件以上存在するグループ」だけを絞り込むことで、重複している値だけを取り出すことができます。 サンプルテーブルの作成 まず、検証用のテーブルを作成します。 mysql> create table DemoTable1858