【MySQL】LIMITとOFFSETを使って従業員テーブルから上位3つの給与を取得する方法
MySQLで従業員の給与データから「1位・2位・3位」のように上位の給与を順番に取得したい場合、LIMIT句とOFFSET句を組み合わせるのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。
1. サンプルテーブルを作成する
まずは従業員の給与を格納するテーブルを作成しましょう。
mysql> create table DemoTable867(EmployeeSalary int); Query OK, 0 rows affected (0.64 sec)
2. テーブルにレコードを挿入する
INSERT文を使って、複数の給与データを登録します。
mysql> insert into DemoTable867 values(63737); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable867 values(899833); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable867 values(23644); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable867 values(89393); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable867 values(534333); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable867 values(889322); Query OK, 1 row affected (0.08 sec)
3. 登録したデータを確認する
SELECT文ですべてのレコードを表示して、正しく登録されているか確認します。
mysql> select *from DemoTable867;
実行結果は以下の通りです。
+----------------+ | EmployeeSalary | +----------------+ | 63737 | | 899833 | | 23644 | | 89393 | | 534333 | | 889322 | +----------------+ 6 rows in set (0.00 sec)
4. 給与が最も高い(1位)レコードを取得する
DESC(降順)で並び替えたうえでLIMIT 1を指定すると、最も高い給与だけを取り出せます。DISTINCTを使用することで、同じ金額の重複データも排除できます。
mysql> select distinct(EmployeeSalary) from DemoTable867 order by EmployeeSalary DESC LIMIT 1;
実行結果:
+----------------+ | EmployeeSalary | +----------------+ | 899833 | +----------------+ 1 row in set (0.02 sec)
5. 2番目に高い給与を取得する
ここで登場するのがOFFSETです。「LIMIT 1 OFFSET 1」と指定すると、先頭から1件をスキップした次の1件、つまり2位の給与を取得できます。
mysql> select distinct(EmployeeSalary) from DemoTable867 order by EmployeeSalary DESC LIMIT 1 OFFSET 1;
実行結果:
+----------------+ | EmployeeSalary | +----------------+ | 889322 | +----------------+ 1 row in set (0.00 sec)
6. 3番目に高い給与を取得する
同様に「LIMIT 1 OFFSET 2」とすれば、先頭から2件をスキップして3位の給与を取得できます。
mysql> select distinct(EmployeeSalary) from DemoTable867 order by EmployeeSalary DESC LIMIT 1 OFFSET 2;
実行結果:
+----------------+ | EmployeeSalary | +----------------+ | 534333 | +----------------+ 1 row in set (0.00 sec)
まとめ:LIMITとOFFSETの仕組み
- ORDER BY カラム名 DESC … 給与を降順(高い順)に並べ替えます
- LIMIT 1 … 取得するレコード数を1件に制限します
- OFFSET n … 先頭からn件をスキップします
つまり、「LIMIT 1 OFFSET n」と書き換えるだけで、任意の順位の給与を柔軟に取得できるのがこの方法のメリットです。N番目に大きい値を求めたいときにぜひ活用してください。
-
JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法
MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI
-
MySQLでファイルパスを格納したテーブルから部分文字列(サブストリング)を取得する方法
MySQLのsubstr()関数で部分文字列を取得する基本構文MySQLで文字列の一部(部分文字列)を取得するには、substr()関数を使用します。基本的な構文は以下のとおりです。select substr(カラム名, 開始位置, 終了位置) from テーブル名 limit 値;select substr(カラム名, 開始位置 + 終了位置) from テーブル名 limit 値;第1引数に対象のカラム、第2引数に抽出を開始する位置、第3引数に終了位置を指定します。終了位置を省略した場合は、開始位置から文字列の末尾までがすべて抽出されます。サンプルテーブルの作成まず、ファイルパスを格納する