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

MySQLでEmployeeテーブルの最高給与と2番目に高い給与を取得する方法

MySQLでは、LIMIT句とOFFSET句を組み合わせることで、Employeeテーブルから最高給与と2番目に高い給与を簡単に取得できます。この記事では、具体的な手順をサンプルコードとともに解説します。

基本構文

給与カラムを降順に並べ替え、上位2件を取得する構文は以下の通りです。

SELECT yourColumnName1, yourColumnName2, ....N FROM yourTableName ORDER BY yourColumnName DESC LIMIT 2 OFFSET 0;

ORDER BY 〜 DESCで降順ソートを行い、LIMIT 2で上位2件、OFFSET 0で先頭から取得することを指定しています。

サンプルテーブルの作成

まず、動作確認用のテーブルを作成します。以下のクエリを実行してください。

mysql> create table EmployeeMaxAndSecondMaxSalary
    -> (
    -> EmployeeId int,
    -> Employeename varchar(20),
    -> EmployeeSalary int
    -> );
Query OK, 0 rows affected (0.88 sec)

テストデータの挿入

次に、INSERTコマンドを使って従業員のレコードを登録します。

mysql> insert into EmployeeMaxAndSecondMaxSalary values(1,'John',34566);
Query OK, 1 row affected (0.20 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(2,'Bob',56789);
Query OK, 1 row affected (0.17 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(3,'Carol',44560);
Query OK, 1 row affected (0.26 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(4,'Sam',76456);
Query OK, 1 row affected (0.29 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(5,'Mike',65566);
Query OK, 1 row affected (0.14 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(6,'David',89990);
Query OK, 1 row affected (0.19 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(7,'James',68789);
Query OK, 1 row affected (0.12 sec)

mysql> insert into EmployeeMaxAndSecondMaxSalary values(8,'Robert',76543);
Query OK, 1 row affected (0.13 sec)

登録データの確認

SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。

mysql> select * from EmployeeMaxAndSecondMaxSalary;

実行結果は以下の通りです。

+------------+--------------+----------------+
| EmployeeId | Employeename | EmployeeSalary |
+------------+--------------+----------------+
|          1 | John         | 34566          |
|          2 | Bob          | 56789          |
|          3 | Carol        | 44560          |
|          4 | Sam          | 76456          |
|          5 | Mike         | 65566          |
|          6 | David        | 89990          |
|          7 | James        | 68789          |
|          8 | Robert       | 76543          |
+------------+--------------+----------------+
8 rows in set (0.00 sec)

最高給与と2番目に高い給与を取得するクエリ

それでは、LIMIT句とOFFSET句を使って、最高給与と2番目に高い給与のレコードを取得してみましょう。

mysql> select EmployeeId, Employeename, EmployeeSalary from EmployeeMaxAndSecondMaxSalary order by
    -> EmployeeSalary desc limit 2 offset 0;

実行結果として、給与が上位2位までの従業員のレコードが表示されます。

+------------+--------------+----------------+
| EmployeeId | Employeename | EmployeeSalary |
+------------+--------------+----------------+
|          6 | David        | 89990          |
|          8 | Robert       | 76543          |
+------------+--------------+----------------+
2 rows in set (0.00 sec)

まとめ

このように、ORDER BY 〜 DESCで降順に並べ替えたうえでLIMIT 2 OFFSET 0を指定するだけで、最高給与と2番目に高い給与を持つ従業員を簡単に抽出できます。上位3位以内など、取得件数を変えたい場合はLIMITの数値を変更するだけで対応可能です。また、同額の給与が存在する可能性がある場合は、DISTINCTを組み合わせるか、ウィンドウ関数のDENSE_RANK()を利用する方法も検討するとよいでしょう。

  1. MySQLクエリでテーブル内の2番目に大きい値を取得する方法

    MySQLでテーブル内の2番目に大きい(最大から2番目の)値を取得したい場合は、LIMIT 1 OFFSET 1 を使用すると簡単に実現できます。この記事では、実際のテーブル作成からデータ挿入、そして2番目に大きい値を取得するクエリまで、手順を追って解説します。1. テーブルを作成するまず、サンプル用のテーブルを作成します。mysql> create table DemoTable -> ( -> Value int -> ); Query OK, 0 rows affected (0.92 sec)2. レコードを挿入する次に、INSERT文を

  2. MySQLのSUM()で合計を求め、AS句を使って列見出しに別名(エイリアス)を指定する方法

    MySQLでは、SUM()関数を使って数値列の合計値を簡単に計算できます。しかし、そのまま実行すると列見出しが「sum(Salary)」のように表示され、読みづらくなります。そこで活用したいのが「AS」キーワードによる別名(エイリアス)の指定です。この記事では、基本的な使い方を具体例とともに解説します。別名(エイリアス)を指定する基本構文列見出しに任意の別名を表示するには、次の構文を使用します。select sum(yourColumnName) as anyAliasName from yourTableName;サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql&