【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;
このようにサブクエリ内で並び順を明示しておくことで、意図した通りの安定した結果を得られます。
-
【MySQL】行も列も選択せずに空の結果セットを返す方法
MySQLでテーブルから行も列も一切表示したくない場合(空の結果セットを取得したい場合)は、SELECT NULLとFALSEを組み合わせて使用します。まずは基本の構文を見てみましょう。 select null from yourTableName where false; サンプルテーブルの作成 実際に動作を確認するため、最初にテーブルを作成します。 mysql> create table DemoTable1367 -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> FirstNam
-
MySQLでテーブルの各グループごとに最大値を取得する方法
MySQLでテーブル内の各値(グループ)ごとの最大値を取得したい場合は、GROUP BY句とMAX()関数を組み合わせて使用します。GROUP BY句が指定したカラムの値ごとに行をグループ化し、MAX()関数がそのグループ内での最大値を返してくれます。ここでは、「国名」と「人口」を格納するサンプルテーブルを使って、具体的な手順を解説していきます。1. サンプルテーブルを作成するまず、CREATE TABLE文でテーブルを作成しましょう。mysql> create table DemoTable -> ( -> CountryName varchar(20),