【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件」など、特定の条件に基づいたレコードの平均を求めることも可能です。用途に応じて柔軟に活用してみてください。
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(
-
MySQLで最初の3件のレコードに特定の値を設定する方法
MySQLで、テーブルの最初の3件のレコードだけに特定の値を設定したい場合は、UPDATE文と組み合わせて LIMIT 3 を使用します。MySQLのUPDATE文は ORDER BY 句と LIMIT 句をサポートしているため、更新対象の行数を簡単に制御できます。ここでは、実際の手順をサンプルコードとともに解説します。 サンプルテーブルの作成 まず、テーブルを作成しましょう。 mysql> create table DemoTable1968 ( Id int NOT NULL AUTO_I