MySQLで列の最小値・最大値を持つ行データを取得する方法
はじめに
MySQLである列(カラム)の中から最小値や最大値を持つ行データを丸ごと取得したい場合、集計関数の MIN() と MAX() をサブクエリと組み合わせて使うのが定番の方法です。MIN() は最小値を、MAX() は最大値をそれぞれ返します。
本記事では、実際にテーブルを作成し、データを挿入してから、最小値と最大値を含む行を抽出するまでの一連の手順を解説します。
1. サンプルテーブルの作成
まず、顧客名と商品金額を格納するテーブルを作成します。
mysql> create table DemoTable
(
CustomerName varchar(20),
ProductAmount int
);
Query OK, 0 rows affected (1.03 sec)2. テストデータの挿入
次に、INSERT文を使って複数のレコードを追加します。
mysql> insert into DemoTable values('Chris',3599);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('David',7843);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Mike',97474);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('Bob',65884);
Query OK, 1 row affected (0.19 sec)3. 登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+--------------+---------------+ | CustomerName | ProductAmount | +--------------+---------------+ | Chris | 3599 | | David | 7843 | | Mike | 97474 | | Bob | 65884 | +--------------+---------------+ 4 rows in set (0.00 sec)
4. 最小値・最大値の行を取得するクエリ
最小値と最大値を含む行を取得するには、WHERE句の中でサブクエリとして MIN() と MAX() を使い、対象カラムの値と比較します。
mysql> select *from DemoTable
where ProductAmount=(select max(ProductAmount) from DemoTable)
or ProductAmount=(select min(ProductAmount) from DemoTable);このクエリを実行すると、以下のように最小値(3599)と最大値(97474)に該当する2行が返されます。
+--------------+---------------+ | CustomerName | ProductAmount | +--------------+---------------+ | Chris | 3599 | | Mike | 97474 | +--------------+---------------+ 2 rows in set (0.00 sec)
補足:同値が複数ある場合の扱い
この方法を使うと、最小値や最大値が同じ行が複数存在する場合でも、該当するすべての行が取得できるというメリットがあります。単純に ORDER BY ProductAmount LIMIT 1 のように並べ替えて取得した場合は1行しか返らないため、同点のデータも含めて抽出したいときには本記事のサブクエリ方式が適しています。
なお、最小値のみ必要な場合は MIN()、最大値のみ必要な場合は MAX() のサブクエリだけを条件にすればOKです。
-
MySQLで列を更新し、末尾のアンダースコア(_)を削除する方法
MySQLで文字列の末尾にある特定の値(この場合はアンダースコア「_」)を削除したい場合、TRIM()関数を使用します。以下にUPDATE文の基本構文を示します。update yourTableName set yourColumnName=trim(trailing _ from yourColumnName);サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1521 -> ( -> StudentCode varchar(20) -> ); Query OK, 0 r
-
【MySQL】特定の列の値を先頭に固定し、残りの行をランダム順で表示する方法
MySQLで行をランダムに並べ替えるには RAND() 関数を使用しますが、さらに「特定の列の値だけは必ず先頭に固定して表示したい」という場合には、ORDER BY 句と組み合わせることで実現できます。この記事では、特定の値を持つ行を常に最上位に固定しつつ、それ以外の行をランダムな順序で表示する方法を、実際のSQL例とともに解説します。1. サンプルテーブルを作成するまず、数値を格納するシンプルなテーブルを作成します。mysql> create table DemoTable1921 ( Numb