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

【MySQL】テーブルの一部(先頭N行)から最小値と最大値を取得する方法

MySQLでは、テーブル全体ではなく一部の行(例:先頭3行)だけを対象に最小値と最大値を求めたいケースがあります。その場合は、LIMIT句で対象行を絞り込むサブクエリを作成し、その結果に対してMIN()およびMAX()関数を適用します。

基本構文

テーブルの一部から最小値と最大値を取得するには、以下の構文を使用します。

select min(yourColumnName) as yourAliasName1, max(yourColumnName) as yourAliasName2
from
(select yourColumnName from yourTableName limit yourLimitValue) tbl1;

ポイントは、LIMIT句を含むSELECT文をサブクエリ(派生テーブル)として記述し、別名 tbl1 を付けて外側のクエリで集計している点です。

実際に試してみよう

1. サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。

mysql> create table MinAndMaxValueDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Value int
    -> );
Query OK, 0 rows affected (0.52 sec)

2. レコードの挿入

INSERT文を使って、4件のデータを登録します。

mysql> insert into MinAndMaxValueDemo(Value) values(10);
Query OK, 1 row affected (0.16 sec)

mysql> insert into MinAndMaxValueDemo(Value) values(100);
Query OK, 1 row affected (0.11 sec)

mysql> insert into MinAndMaxValueDemo(Value) values(50);
Query OK, 1 row affected (0.13 sec)

mysql> insert into MinAndMaxValueDemo(Value) values(40);
Query OK, 1 row affected (0.12 sec)

3. 登録されたデータの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select * from MinAndMaxValueDemo;

実行結果は次のとおりです。

+----+-------+
| Id | Value |
+----+-------+
| 1  | 10    |
| 2  | 100   |
| 3  | 50    |
| 4  | 40    |
+----+-------+
4 rows in set (0.00 sec)

4. 一部の行から最小値・最大値を取得

ここで、先頭3行のみを対象に最小値と最大値を取得するクエリを実行します。

mysql> select min(Value) as MinimumValue, max(Value) as MaximumValue from
    -> (select Value from MinAndMaxValueDemo limit 3) tbl1;

実行結果:

+--------------+--------------+
| MinimumValue | MaximumValue |
+--------------+--------------+
| 10           | 100          |
+--------------+--------------+
1 row in set (0.07 sec)

先頭3行(Id=1〜3)の値は「10」「100」「50」なので、最小値が 10、最大値が 100 として正しく取得できていることがわかります。4行目の「40」は集計対象外になっています。

注意点:ORDER BYとの併用を推奨

LIMIT句は通常、ORDER BY句と組み合わせて使うのが一般的です。ORDER BYなしでLIMITを使用した場合、返される行の順序は保証されないため、「どの行が一部として選ばれるか」が環境によって変わる可能性があります。

たとえば「値の小さい順に上位3件」の最小値・最大値を取得したい場合は、次のように記述します。

select min(Value) as MinimumValue, max(Value) as MaximumValue from
(select Value from MinAndMaxValueDemo order by Value limit 3) tbl1;

このようにサブクエリ内で並び順を明示しておくことで、意図した通りの安定した結果を得られます。

  1. 【MySQL】行も列も選択せずに空の結果セットを返す方法

    MySQLでテーブルから行も列も一切表示したくない場合(空の結果セットを取得したい場合)は、SELECT NULLとFALSEを組み合わせて使用します。まずは基本の構文を見てみましょう。 select null from yourTableName where false; サンプルテーブルの作成 実際に動作を確認するため、最初にテーブルを作成します。 mysql> create table DemoTable1367 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> FirstNam

  2. MySQLでテーブルの各グループごとに最大値を取得する方法

    MySQLでテーブル内の各値(グループ)ごとの最大値を取得したい場合は、GROUP BY句とMAX()関数を組み合わせて使用します。GROUP BY句が指定したカラムの値ごとに行をグループ化し、MAX()関数がそのグループ内での最大値を返してくれます。ここでは、「国名」と「人口」を格納するサンプルテーブルを使って、具体的な手順を解説していきます。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成しましょう。mysql> create table DemoTable -> ( -> CountryName varchar(20),