MySQLでソート済みリストの中央から結果を取得する方法
ソートされたリストの中央から結果を選択したい場合は、ORDER BY句とLIMITを組み合わせて使用します。LIMITにオフセットを指定することで、並べ替え後のリストの任意の位置からレコードを取得できます。
サンプルテーブルの作成
まず、デモ用のテーブルを作成します。以下がそのクエリです。
mysql> create table sortedListDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(100)
-> );
Query OK, 0 rows affected (0.46 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。
mysql> insert into sortedListDemo(StudentName) values('John');
Query OK, 1 row affected (0.62 sec)
mysql> insert into sortedListDemo(StudentName) values('Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into sortedListDemo(StudentName) values('Adam');
Query OK, 1 row affected (0.13 sec)
mysql> insert into sortedListDemo(StudentName) values('James');
Query OK, 1 row affected (0.21 sec)
mysql> insert into sortedListDemo(StudentName) values('Jace');
Query OK, 1 row affected (0.13 sec)
mysql> insert into sortedListDemo(StudentName) values('Mike');
Query OK, 1 row affected (0.12 sec)
mysql> insert into sortedListDemo(StudentName) values('Carol');
Query OK, 1 row affected (0.18 sec)
mysql> insert into sortedListDemo(StudentName) values('Bob');
Query OK, 1 row affected (0.17 sec)
mysql> insert into sortedListDemo(StudentName) values('Ramit');
Query OK, 1 row affected (0.16 sec)
mysql> insert into sortedListDemo(StudentName) values('Chris');
Query OK, 1 row affected (0.21 sec)
mysql> insert into sortedListDemo(StudentName) values('Robert');
Query OK, 1 row affected (0.14 sec)
mysql> insert into sortedListDemo(StudentName) values('David');
Query OK, 1 row affected (0.21 sec)テーブルの全レコードを表示
SELECT文を使用して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select * from sortedListDemo;
実行すると、次のような出力が得られます。
+----+-------------+
| Id | StudentName |
+----+-------------+
| 1 | John |
| 2 | Sam |
| 3 | Adam |
| 4 | James |
| 5 | Jace |
| 6 | Mike |
| 7 | Carol |
| 8 | Bob |
| 9 | Ramit |
| 10 | Chris |
| 11 | Robert |
| 12 | David |
+----+-------------+
12 rows in set (0.00 sec)
ソート済みリストの中央から結果を取得する
ここで本題です。ソートされたリストの中央から結果を取得するには、ORDER BYで並べ替えたうえで、LIMITに「オフセット, 取得件数」の形式で値を指定します。
今回は LIMIT 4, 6 と設定しました。これは「先頭から4件をスキップし、その後の6件を取得する」という意味になります。つまり、学生名(StudentName)で昇順に並べ替えたリストの中央付近にある6件のレコードが表示されます。
mysql> select * from sortedListDemo
-> order by StudentName
-> LIMIT 4,6;
実行すると、次のような出力が得られます。
+----+-------------+
| Id | StudentName |
+----+-------------+
| 12 | David |
| 5 | Jace |
| 4 | James |
| 1 | John |
| 6 | Mike |
| 9 | Ramit |
+----+-------------+
6 rows in set (0.00 sec)
このように、ORDER BYとLIMITを組み合わせることで、ソート済みデータの中間部分だけを簡単に抽出できます。ページネーションや部分的なデータ表示が必要な場面で非常に便利なテクニックなので、ぜひ覚えておきましょう。
-
MySQLで当日の00:00から現在時刻までのレコードを抽出するクエリの書き方
はじめにMySQLで「今日の日付の午前0時(00:00)から現在時刻まで」のレコードを取得したいケースはよくあります。例えば、現在の日時が 2019-09-14 08:50:10 である場合、2019-09-14 00:00:00 から 2019-09-14 08:50:10 までの範囲にあるレコードを抽出することになります。本記事では、実際にテーブルを作成し、データを挿入しながら、この条件を実現するクエリを具体的に解説します。サンプルテーブルの作成まず、DATETIME型のカラムを持つテーブルを作成します。mysql> create table DemoTable( &nbs
-
MySQLでSELECTとSHOWコマンドの結果を1つに結合する方法
はじめにMySQLでは、SELECT文やSHOWコマンドの実行結果を、ユーザー定義変数(セッション変数)を活用することで1つの結果セットにまとめることができます。この記事では、その具体的な方法をサンプルコード付きで解説します。基本的な構文複数のコマンド結果を1つに結合するには、以下のようなクエリを使用します。各変数に別名(エイリアス)を付けて出力するのがポイントです。select @任意の変数名1 as 別名1, @任意の変数名2 as 別名2, ......N;手順1:最初の変数を作成・初期化するまず、結合したい値を格納するための最初の変数を作成し、初期化します。mysql> set