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

【MySQL】サブクエリとLIMIT句で最初の3つの値のみの平均を求める方法

MySQLでは、テーブル内の先頭数件のレコードだけを対象に集計処理を行いたいケースがあります。例えば、5つのスコアが格納された列から、最初の3つの値のみの平均を求めたい場合です。このような場合には、サブクエリLIMIT句を組み合わせることで簡単に実現できます。

本記事では、テーブルの作成からデータ挿入、そして最初の3つの値の平均を取得するまでの手順を順番に解説します。

1. テーブルの作成

まず、スコアを格納するためのテーブルを作成しましょう。

mysql> create table DemoTable
(
    Score int
);
Query OK, 0 rows affected (0.62 sec)

2. レコードの挿入

続いて、INSERTコマンドを使ってテーブルに5件のレコードを挿入します。

mysql> insert into DemoTable values(80);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(45);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(55);
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable values(78);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(88);
Query OK, 1 row affected (0.13 sec)

3. テーブルの内容を確認

SELECT文を実行して、テーブルに登録されたすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、次のような結果が出力されます。

+-------+
| Score |
+-------+
|    80 |
|    45 |
|    55 |
|    78 |
|    88 |
+-------+
5 rows in set (0.00 sec)

4. 最初の3つの値のみの平均を求めるクエリ

それでは本題です。「最初の3つの値のみの平均」を求めるには、サブクエリ内で LIMIT 3 を指定します。これにより先頭の3件のレコードだけが抽出され、その結果に対してAVG関数で平均が計算されます。

mysql> select avg(Score)
   from ( select Score from DemoTable limit 3) tbl;

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

+------------+
| avg(Score) |
+------------+
| 60.0000    |
+------------+
1 row in set (0.00 sec)

クエリの仕組み

このクエリは、次の流れで動作しています。

  • サブクエリ部分:「select Score from DemoTable limit 3」により、テーブルの先頭3件(80、45、55)が抽出されます。
  • 外側のクエリ:抽出された3件の値に対してavg()関数が適用され、平均値が計算されます。

(80 + 45 + 55) ÷ 3 = 60 となるため、正しく平均値「60.0000」が取得できていることがわかります。

なお、ORDER BY句を併用すれば、「最小値の上位3件」や「最大値の上位3件」など、特定の条件に基づいたレコードの平均を求めることも可能です。用途に応じて柔軟に活用してみてください。

  1. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(

  2. MySQLで最初の3件のレコードに特定の値を設定する方法

    MySQLで、テーブルの最初の3件のレコードだけに特定の値を設定したい場合は、UPDATE文と組み合わせて LIMIT 3 を使用します。MySQLのUPDATE文は ORDER BY 句と LIMIT 句をサポートしているため、更新対象の行数を簡単に制御できます。ここでは、実際の手順をサンプルコードとともに解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1968     (     Id int NOT NULL AUTO_I