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

【MySQL】MIN関数とMAX関数で最小値・最大値を取得する方法

MySQLで特定の列の最大値を取得するには MAX() 関数を、最小値を取得するには MIN() 関数を使用します。これらは最も基本的な集計関数の一つで、数値はもちろん、日付や文字列の大小比較にも利用できます。

基本構文

特定の列の最高値と最低値を求め、その値に該当するレコードを取得する場合の基本的な構文は以下の通りです。

mysql> SELECT @min_val:=MIN(columnName),@max_val:=MAX(columnName) FROM tableName;
mysql> SELECT * FROM tableName WHERE columnName=@min_val OR columnName=@max_val;

補足: ここでは、データベース「StudentsRecords」の中に「STUDENT」テーブルが存在するものとして解説を進めます。また、@val:= のようなユーザー変数への代入構文はMySQL 8.0以降で非推奨となっているため、実務では後述のサブクエリを使った方法が推奨されます。

今回使用する「STUDENT」テーブルは以下の通りです。

StudentIdStudentMarks
S00190
S00297
S00372

クエリ

それでは、実際に最小値と最大値を取得するクエリを実行してみましょう。

mysql> SELECT @min_val:=MIN(StudentMarks),@max_val:=MAX(StudentMarks) FROM STUDENT;
mysql> SELECT * FROM STUDENT WHERE StudentMarks =@min_val OR StudentMarks =@max_val;

出力結果

+---------------------+
| StudentMarks        |
+---------------------+
| 97                  |
+---------------------+

上記のクエリでは、「StudentMarks」が対象となる列名を、「STUDENT」が最小値・最大値を検索するテーブル名を指しています。この実行例では、最高得点である「97」に該当する行が出力されました。同じ仕組みで、最低得点(72)に該当する行も条件に一致すれば同時に取得できます。

サブクエリを使った代替方法(推奨)

MySQL 8.0以降の環境では、ユーザー変数に頼らず、次のようにサブクエリを組み合わせる書き方が推奨されています。

mysql> SELECT * FROM STUDENT
    -> WHERE StudentMarks = (SELECT MIN(StudentMarks) FROM STUDENT)
    ->    OR StudentMarks = (SELECT MAX(StudentMarks) FROM STUDENT);

この方法なら、1つのクエリで最小値と最大値の両方に該当する行をまとめて取得でき、コードの可読性や保守性も大きく向上します。

  1. MySQLで列の最大値を取得する方法をわかりやすく解説

    MySQLで特定の列の最大値を取得するには、MAX(columnName)関数を使用します。本記事では、その基本的な使い方に加えて、データベースやテーブルの設計に関する前提知識もあわせて解説します。MySQLのデータベースとテーブルの基礎MySQLをインストールする前に、まず使用するバージョンと配布形式(バイナリファイルか、ソースファイルからビルドするか)を決定することが重要です。新しく作成したばかりのデータベースには、当然ながらテーブルはまだ存在しません。データベース設計において最も重要なのは、以下の要素を決めることです。データベース全体の構造必要となるテーブルの一覧各テーブルに含まれる列(

  2. 【Java】リスト内の最大要素と最小要素の位置(インデックス)を見つける方法

    リストや配列を扱う際、「最大値・最小値そのもの」だけでなく、それらがどの位置(インデックス)に存在するかを知りたいケースはよくあります。本記事では、Javaの Collections.max() / Collections.min() と線形探索(リニアサーチ)を組み合わせて、最大・最小要素の位置を特定するプログラムを解説します。 サンプルコード import java.util.*; import java.util.Arrays; import java.util.Collections; public class Demo { // 線形探索:指定した値 t のインデックスを