テーブルの中で最大値・最小値を求める際に、意外と知られていないのがMAX関数とMIN関数です。これまで目視で確認していた数値の最大値・最小値をSQL文1つで求められるようになります。
本記事では、SQL文のMAX関数・MIN関数の使い方や実践的な使用例をご紹介していきましょう。
SQL文のMAX関数・MIN関数とは?
はじめにSQL文のMAX関数とMIN関数の使用方法についてご説明をしていきましょう。
SQL文 MAX関数
SQL文のMAX関数とはデータベース上に作成されたテーブルの中から、指定したグループの最大値が含まれるレコードを取得する関数のことです。
例えば、商品の名前と値段が登録されているテーブルから最も値段の高い商品を取得する際などにMAX関数を使用すると、簡単に意図した行を取得することができます。
SQL文のMAX関数の構文は以下のような形式です。
SELECT MAX(抜き出すカラム) AS カラム名 FROM テーブル名;
構文だけでは具体的な使用方法が分かりづらいかもしれませんので、実際の使用例を見てみましょう。まずはMySQLを用いてテーブルを作成してみましょう。
mysql> create table foods (id int, name varchar(10), price varchar(10)); Query OK, 0 rows affected (0.00 sec) mysql> insert foods(id, name, price) values(1, "Banana", 100),(2, "Apple", 200),(3, "Orange", 300), (4, "Bread", 400),(5, "Cake", 500); Query OK, 5 rows affected (0.00 sec) Records: 5 Duplicates: 0 Warnings: 0
これで以下のようなテーブルが出来上がったはずです。
mysql> select * from foods; +------+--------+-------+ | id | name | price | +------+--------+-------+ | 1 | Banana | 100 | | 2 | Apple | 200 | | 3 | Orange | 300 | | 4 | Bread | 400 | | 5 | Cake | 500 | +------+--------+-------+ 5 rows in set (0.00 sec)
この中から、値段が最も高いレコードを抜き出します。
mysql> SELECT MAX(price) AS LargestPrice FROM foods; +--------------+ | LargestPrice | +--------------+ | 500 | +--------------+ 1 row in set (0.01 sec)
先ほどのfoodsテーブルから、最も数値の大きい500を抜き出しています。これがSQLのMAX関数の使い方です。
SQL文 MIN関数
SQL文のMIN関数とはデータベース上に作成されたテーブルの中から、指定したグループの最小値が含まれるレコードを取得する関数のことです。
例えば、商品の名前と値段が登録されているテーブルから最も値段の高い商品を取得する際などにMAX関数を使用すると、簡単に意図した行を取得することができます。
SQL文のMAX関数の構文は以下のような形式です。
SELECT MIN(抜き出すカラム) AS カラム名 FROM テーブル名;
MIN関数も構文だけでは具体的な使用方法が分かりづらいかもしれませんので、実際の使用例を見てみましょう。先ほどのMySQLを用いて説明します。
mysql> SELECT MIN(price) AS SmallestPrice FROM foods; +---------------+ | SmallestPrice | +---------------+ | 100 | +---------------+ 1 row in set (0.00 sec)
先ほどのfoodsテーブルから、最も数値の小さい100を抜き出しています。これがSQLのMIN関数の使い方です。
MAX関数・MIN関数を使用しない場合は?
MAX関数・MIN関数を使用しない場合には、テーブル内のデータをソートする「ORDER BY」という機能を用いることになります。
ただし「ORDER BY」は、並び替えの機能しか持っていないため、単体で使用する場合には「最大値を抜き出す」「最小値を抜き出す」といったMAX関数・MIN関数のような役割を果たすことができません。
ORDER BYで昇順並び替え
mysql> SELECT * FROM foods ORDER BY price ASC; +------+--------+-------+ | id | name | price | +------+--------+-------+ | 1 | Banana | 100 | | 2 | Apple | 200 | | 3 | Orange | 300 | | 4 | Bread | 400 | | 5 | Cake | 500 | +------+--------+-------+ 5 rows in set (0.00 sec)
SQL文 MAX関数・MIN関数の実践的な使用例
最後にSQL文 MAX関数・MIN関数の実践的な使用例を解説していきます。はじめにご紹介した例はシンプルな使い方でしたが、以下のような複雑な使用方法もあります。
最大値と最小値を同時に取得
SQL文のMAX関数とMIN関数を用いて、最大値と最小値を同時に取得する方法をご紹介します。
mysql> SELECT MAX(price) AS LargestPrice, MIN(price) AS SmallestPrice FROM foods; +--------------+---------------+ | LargestPrice | SmallestPrice | +--------------+---------------+ | 500 | 100 | +--------------+---------------+ 1 row in set (0.00 sec)
見た通り、MAX関数の構文とMIN関数の構文を「,(コンマ)」で区切ることで、同時に最大値・最小値を取得することができています。
最大値・最小値と共に他のカラムを取得
最初にご紹介した例では、foodsテーブルのpriceの最大値・最小値だけが「LargestPrice」「SmallestPrice」というカラムに登録されました。しかし、実際に使用する際にはfoodsテーブルのnameとpriceをセットで登録したいという場合が多いのではないでしょうか。
こちらでは、最大値のpriceとそれに伴うnameカラム、最小値のpriceとそれに伴うnameカラムを取得する方法をご紹介します。
最大値のpriceとそれに伴うnameカラムの取得
mysql> SELECT name, price FROM foods WHERE price = ( SELECT MAX(price) FROM foods); +------+-------+ | name | price | +------+-------+ | Cake | 500 | +------+-------+ 1 row in set (0.00 sec)
最小値のpriceとそれに伴うnameカラムの取得
mysql> SELECT name, price FROM foods WHERE price = ( SELECT MIN(price) FROM foods); +--------+-------+ | name | price | +--------+-------+ | Banana | 100 | +--------+-------+ 1 row in set (0.00 sec)
最初に紹介した例と比べると、MAX関数・MIN関数の構文が異なります。しかし、SQL文を紐解いていくと、「WHERE」で条件付けを行っているだけだということが分かるはずです。
まとめ
本記事では、SQL文のMAX関数・MIN関数の使い方や実践的な使用例をご紹介していきました。ORDER BYなどを使用するよりもスマートに最大値・最小値を取得できるのが魅力的ですね。これを機に、MAX関数・MIN関数をどんどん使用していきましょう!
【関連記事】
▶︎SQL order byでソート指定するサンプルコード集 指定のレコードだけ先頭に並べるには?
▶︎【実践編】SQLのIF構文で関数を作ってみよう!基礎的な使い方も解説!
▶︎SQL having 集約関数の絞り込み whereよりもレスポンスが遅い理由とは?
SQLを学んでWebエンジニアを目指そう
Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。
このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。
Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。