MySQLでORDER BY DESCを使って降順ソートし、先頭の3件のレコードを表示する方法
データを降順(DESC)で並べ替えたうえで、先頭の数件だけを取得したいケースはよくあります。その場合は、ORDER BY ... DESCとLIMITを組み合わせることで簡単に実現できます。ここでは、具体的なサンプルを使って手順を解説します。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable
(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(100)
);
Query OK, 0 rows affected (0.59 sec)レコードの挿入
insertコマンドを使って、テーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable(UserName) values('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(UserName) values('Robert');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(UserName) values('Bob');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(UserName) values('David');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable(UserName) values('Mike');
Query OK, 1 row affected (0.10 sec)登録済みレコードの確認
select文を実行して、テーブル内のすべてのレコードを表示してみます。
mysql> select *from DemoTable;
このクエリを実行すると、次のような出力が得られます。
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | Chris | | 2 | Robert | | 3 | Bob | | 4 | David | | 5 | Mike | +--------+----------+ 5 rows in set (0.00 sec)
降順ソート後に先頭3件を表示するクエリ
それでは本題です。MySQLの列にORDER BY DESCを適用したうえで、最初の3件のレコードを表示するには、次のようにクエリを記述します。
mysql> select *from DemoTable order by UserId DESC LIMIT 0,3;
実行すると、次のような結果が出力されます。
+--------+----------+ | UserId | UserName | +--------+----------+ | 5 | Mike | | 4 | David | | 3 | Bob | +--------+----------+ 3 rows in set (0.00 sec)
ポイント解説
LIMIT 0,3の「0」は取得開始位置(オフセット)、「3」は取得する件数を意味します。このクエリではUserIdを基準に降順へ並べ替えているため、IDが大きい順に5、4、3のレコードが先頭から取得されています。なお、オフセットが0の場合はLIMIT 3と省略して記述しても同じ結果になります。新しいデータほどIDが大きくなる設計のテーブルであれば、この方法は「最新の3件を取得したい」という要件にもそのまま活用できます。
-
MySQLで日付データから月の初日と末日を取得する方法
MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>
-
MySQLのORDER BY ASCでNULL値を最下部に表示する方法
MySQLのORDER BY ASCでNULL値を最下部に表示する方法MySQLでは、ORDER BY句を昇順(ASC)で使用した場合、デフォルトではNULLが先頭(上部)に表示されます。しかし実務では、「NULLは一番下に表示したい」というケースがよくあります。このような場合には、CASE式とORDER BYを組み合わせることで簡単に実現できます。この記事では、NULLや空文字列()を含むデータを昇順ソートしつつ、NULLを最下部に表示する方法を、具体的なサンプルコードとともに解説します。1. サンプルテーブルの作成まず、テーブルを作成します。mysql> create table D