SQLで1つおきの行(奇数行)を抽出し、降順で表示する方法
SQLで交互の行を降順で取得するには?
テーブルから1つおきの行(奇数行)だけを取り出したい場合は、WHERE句でMOD()関数を使用します。MOD()は剰余(割り算の余り)を返す関数で、「MOD(列名, 2) = 1」という条件を指定することで、IDが奇数の行、つまり1行おきのデータのみを抽出できます。
さらに、ORDER BY 〜 DESCを組み合わせれば、抽出した結果を降順(大きい順)で表示することができます。
基本構文は以下の通りです。
SELECT * FROM テーブル名 WHERE MOD(列名,2)=1 ORDER BY 列名 DESC;
サンプルテーブルを作成する
それでは、実際に動作を確認してみましょう。まずはテーブルを作成します。
mysql> create table DemoTable
(
UniqueId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ClientName varchar(40),
ClientAge int
);
Query OK, 0 rows affected (1.02 sec)レコードを挿入する
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを追加します。
mysql> insert into DemoTable(ClientName,ClientAge) values('Chris',34);
Query OK, 1 row affected (0.47 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Tom',45);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Sam',36);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('Carol',42);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable(ClientName,ClientAge) values('David',38);
Query OK, 1 row affected (0.12 sec)すべてのレコードを確認する
SELECT文でテーブル内の全レコードを表示してみましょう。
mysql> select *from DemoTable;
このクエリを実行すると、次のような出力が得られます。
+----------+------------+-----------+ | UniqueId | ClientName | ClientAge | +----------+------------+-----------+ | 1 | Chris | 34 | | 2 | Tom | 45 | | 3 | Sam | 36 | | 4 | Carol | 42 | | 5 | David | 38 | +----------+------------+-----------+ 5 rows in set (0.00 sec)
1つおきの行を降順で抽出する
それでは本題です。MOD()関数とORDER BY DESCを組み合わせて、1つおきの行を降順で取得してみましょう。
mysql> select *from DemoTable where mod(UniqueId,2)=1 order by UniqueId DESC;
実行結果は以下の通りです。
+----------+------------+-----------+ | UniqueId | ClientName | ClientAge | +----------+------------+-----------+ | 5 | David | 38 | | 3 | Sam | 36 | | 1 | Chris | 34 | +----------+------------+-----------+ 3 rows in set (0.00 sec)
解説
条件「MOD(UniqueId, 2) = 1」により、UniqueIdが奇数(1、3、5)の行だけが抽出されます。さらに「ORDER BY UniqueId DESC」によって、結果がIDの大きい順=降順(5 → 3 → 1)で並び替えられて表示されていることがわかります。
なお、偶数行を抽出したい場合は、条件を「MOD(列名, 2) = 0」に変更するだけでOKです。昇順で表示したい場合は「DESC」を外すか「ASC」を指定してください。
-
MySQLでLIMIT句を使ってページネーション(次の行)を取得する方法
MySQLでページネーション(特定の範囲の行だけを取得すること)を実現したい場合は、LIMIT句を使用します。LIMIT句では「開始位置(オフセット)」と「取得する行数」を指定できるため、大量のデータの中から必要な部分だけを効率よく取り出せます。この記事では、実際にテーブルを作成し、データを挿入したうえで、次の行を取得するページネーションの具体的な手順を解説します。1. サンプルテーブルを作成するまずはデモ用のテーブルを作成しましょう。以下のSQLでは、自動採番されるidカラムと名前を格納するnameカラムを持つテーブル「demo40」を定義しています。mysql> create tab
-
MySQLでSELECTクエリの結果を並べ替える方法|ORDER BY句の基本と実践例
データベース操作では、テーブルから特定のデータや行を抽出することが日常的によくあります。通常、SELECT文で取得した行はテーブル内に格納されている順序で返されますが、場合によっては、特定の列を基準にして昇順または降順で並べ替えた結果を取得したいこともあるでしょう。そんなときに活躍するのが「ORDER BY」句です。以下で具体的な使い方を見ていきましょう。例えば、「name」フィールドを含む複数のカラムを持つテーブルがあるとします。テーブルからすべての行を取得したいけれど、名前のアルファベット順に並べ替えた状態で結果を受け取りたい——こうしたケースでは、ORDER BY句を使って「name」フ