MySQLのLEAST()関数で4つのカラムから最小値(最小スコア)を取得する方法
MySQLでテーブル内の4つのカラム全体から最小スコアを求めたい場合は、LEAST()関数を使用します。LEAST()関数は、引数として渡された複数の値の中から最も小さい値を返す組み込み関数です。
サンプルテーブルの作成
まず、4つのスコアカラムを持つテーブルを作成しましょう。
mysql> create table DemoTable(
Score1 int,
Score2 int,
Score3 int,
Score4 int
);
Query OK, 0 rows affected (0.50 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable values(88,76,45,56);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(99,78,87,34);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(34,32,56,98);
Query OK, 1 row affected (0.44 sec)
登録データの確認
SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
上記のクエリを実行すると、次のような結果が出力されます。
+--------+--------+--------+--------+
| Score1 | Score2 | Score3 | Score4 |
+--------+--------+--------+--------+
| 88 | 76 | 45 | 56 |
| 99 | 78 | 87 | 34 |
| 34 | 32 | 56 | 98 |
+--------+--------+--------+--------+
3 rows in set (0.00 sec)
LEAST()関数で最小スコアを取得する
それでは、データベースの4つのカラムから最小スコアを取得するクエリを見ていきましょう。LEAST()関数に4つのカラムを渡すことで、各行ごとの最小値を簡単に求めることができます。
mysql> select least(Score1,Score2,Score3,Score4) AS MinimumScore from DemoTable;
実行結果は以下の通りです。
+--------------+
| MinimumScore |
+--------------+
| 45 |
| 34 |
| 32 |
+--------------+
3 rows in set (0.00 sec)
補足:MIN()関数との違い
なお、MySQLには似たような関数としてMIN()関数がありますが、使い方が異なる点に注意が必要です。
- LEAST()関数: 同じ行内の複数のカラム(横方向)の値を比較し、最小値を返します。
- MIN()関数: 特定の1つのカラム(縦方向)に含まれる全行の値を比較し、最小値を返します。
今回のように「1行の中にある複数のカラムから最小値を求めたい」場合には、LEAST()関数が適しています。また、NULLが含まれる場合、LEAST()はNULLを返すため、NULLを除外したい場合はCOALESCE()などと組み合わせて使用するとよいでしょう。
-
JavaでMySQLテーブルのカラム数を取得・カウントする方法
MySQLテーブルのカラム(列)数をJavaで取得するには、ResultSetMetaDataインターフェースを使用します。ResultSetMetaDataを活用すれば、カラムの総数だけでなく、各カラムの名前やデータ型といった詳細情報も簡単に取得できます。前提:サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。以下のSQLでは、3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable -> ( -> St
-
MySQLで2つの列の組み合わせごとの出現回数を集計する方法
MySQLでは、GROUP BY句とGREATEST()・LEAST()関数を組み合わせることで、2つの列にまたがる値の組み合わせごとの出現回数を簡単に集計できます。この記事では、具体的なサンプルを使って手順を解説します。1. サンプルテーブルを作成するまず、2つの名前列を持つテーブルを作成します。mysql> create table DemoTable -> ( -> Name1 varchar(20), -> Name2 varchar(20) -> );Query OK, 0 rows affected (0.61 sec)2. テ