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

MySQLでテーブルから上位2つの最大値を取得する方法

MySQLでテーブルから最も大きい値の上位2件を取得したい場合は、ORDER BY句とLIMIT句を組み合わせて使用します。カラムを降順(DESC)で並べ替え、LIMIT 2を指定することで、上位2件のみを効率的に取得できます。

基本構文

select * from yourTableName order by yourColumnName DESC LIMIT 2;

実際に試してみよう

まずはサンプル用のテーブルを作成します。

mysql> create table DemoTable
   -> (
   -> Value int
   -> );
Query OK, 0 rows affected (0.54 sec)

次に、INSERT文を使っていくつかのレコードを挿入します。

mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.18 sec)

mysql> insert into DemoTable values(70);
Query OK, 1 row affected (0.28 sec)

mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values(120);
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable values(98);
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable values(105);
Query OK, 1 row affected (0.19 sec)

SELECT文ですべてのレコードを表示して確認しましょう。

mysql> select *from DemoTable;

出力結果

+-------+
| Value |
+-------+
|    90 |
|    70 |
|    40 |
|   120 |
|    98 |
|   105 |
+-------+
6 rows in set (0.00 sec)

上位2件の最大値を取得するクエリ

以下のクエリを実行すると、Valueカラムの値が大きい順に並べ替えられ、そのうち上位2件だけが返されます。

mysql> select *from DemoTable order by Value DESC LIMIT 2;

出力結果

+-------+
| Value |
+-------+
|   120 |
|   105 |
+-------+
2 rows in set (0.00 sec)

このように、ORDER BYで降順ソートを行いLIMIT 2を指定するだけで、テーブル内の最も大きい値トップ2を簡単に取得できます。同様の手法は、売上ランキングやスコアの上位抽出など、さまざまな場面で応用できるので覚えておくと便利です。

  1. MySQLでタイムスタンプ値を使って今日と昨日の2日分のデータを取得する方法

    はじめにこの記事では、bigint型として保存されたUNIXタイムスタンプ値を持つMySQLテーブルから、「今日」と「昨日」の2日分のデータを抽出する方法を解説します。unix_timestamp()関数とcurdate()関数、そしてINTERVAL句を組み合わせることで、日付計算を簡単に行うことができます。1. サンプルテーブルの作成まず、出荷日をタイムスタンプ値で格納するテーブルを作成します。mysql> create table DemoTable1495    -> (    -> Sh

  2. MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方

    MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec