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

MySQLでテーブルから2番目に高い給与を取得する方法(LIMITとOFFSETの使い方)

MySQLのテーブルから「2番目に高い給与」を取得したい場面は、実務でも面接でもよく登場する定番の課題です。この記事では、LIMIT句とOFFSET句を組み合わせたシンプルな方法を、実際のサンプルデータを使いながらわかりやすく解説します。

サンプルデータの準備

まず、以下のような従業員名と給与を格納したテーブル Salary を用意します。

mysql> Select * from Salary;
+--------+--------+
| Name   | Salary |
+--------+--------+
| Gaurav |  50000 |
| Rahul  |  40000 |
| Ram    |  45000 |
| Raman  |  45000 |
+--------+--------+
4 rows in set (0.00 sec)

このデータを見ると、最高額は Gaurav の 50000、その次に高いのは 45000 であることがわかります。ここから2番目に高い給与を持つ行を取得してみましょう。

LIMIT と OFFSET を使った取得方法

2番目に高い給与を取得するには、給与を降順(DESC)に並べ替えたうえで、先頭の1件をスキップし、次の1件だけを取り出します。これを実現するのが ORDER BYLIMITOFFSET の組み合わせです。

mysql> Select * from Salary order by Salary DESC limit 1 offset 1;
+-------+--------+
| Name  | Salary |
+-------+--------+
| Raman |  45000 |
+-------+--------+
1 row in set (0.00 sec)

クエリの仕組み

  • ORDER BY Salary DESC: 給与を高い順に並べ替えます。
  • LIMIT 1: 取得する行数を1件に制限します。
  • OFFSET 1: 先頭の1件(最高額)をスキップします。

つまり「降順に並べたリストの2番目」を取り出すことで、2番目に高い給与の行が得られるという仕組みです。同様に OFFSET 2 に変更すれば、3番目に高い給与も取得できます。

注意点:同額のデータがある場合

上記の例では、45000 という同じ給与が2人分存在します。この方法では並べ替え後の「行の位置」に基づいて取得するため、同額のデータがあっても単純に2行目を返します。もし「重複を除いた上で2番目に高い金額」が必要な場合は、DISTINCT を組み合わせると確実です。

mysql> Select DISTINCT Salary from Salary order by Salary DESC limit 1 offset 1;
+--------+
| Salary |
+--------+
|  45000 |
+--------+
1 row in set (0.00 sec)

まとめ

MySQLでN番目に高い値を取得する基本は、「ORDER BY で降順に並べ、LIMIT 1 と OFFSET (N-1) で位置を指定する」ことです。シンプルでありながら応用範囲が広いテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで特定の月と年のレコードを抽出する方法(YEAR()・MONTH()関数の使い方)

    はじめにMySQLで特定の月と年に該当するレコードだけを取り出したい場合は、YEAR() 関数と MONTH() 関数を組み合わせて使用します。これらの関数は、日付型のカラムからそれぞれ「年」と「月」を数値として抽出できるため、WHERE句での条件指定に非常に便利です。本記事では、実際にテーブルを作成し、データを挿入してから、特定の年月のレコードを抽出するまでの手順を順番に解説します。1. サンプルテーブルの作成まず、顧客の購入情報を管理するテーブルを作成します。顧客ID、顧客名、請求額、購入日を持つシンプルな構造です。mysql> create table DemoTable

  2. MySQLテーブルから新しく追加されたレコードを取得する方法

    MySQLでテーブルに新しく追加されたレコードを取得するには、ORDER BY句とLIMIT句を組み合わせて使用します。AUTO_INCREMENTで採番される主キー(ID)を基準に降順(DESC)で並べ替え、LIMITで取得件数を指定することで、最新のレコードだけを効率的に取り出せます。 サンプルテーブルの作成 まず、CREATE TABLE文でテーブルを作成します。ここでは、自動採番される「StudentId」を主キーとする学生テーブルを用意しました。 mysql> create table DemoTable1486 -> ( -> StudentId