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

MySQLテーブルから奇数番号のレコードを1つおきに取得する方法

MySQLで奇数番号のレコードを1つおきに取得する方法

MySQLのテーブルから、idが奇数であるレコード(1、3、5…)だけを抽出したいケースはよくあります。このような場合、MOD()関数HAVING句を組み合わせることで、シンプルなクエリで実現できます。

ここでは、以下のような「Information」というテーブルのデータを使って、その手順を解説します。

mysql> Select * from Information;
+----+---------+
| id | Name    |
+----+---------+
| 1  | Gaurav  |
| 2  | Ram     |
| 3  | Rahul   |
| 4  | Aarav   |
| 5  | Aryan   |
| 6  | Krishan |
+----+---------+
6 rows in set (0.00 sec)

上記のテーブルには6件のレコードが格納されています。この中から奇数番号のレコードのみを取得するには、次のクエリを実行します。

mysql> Select id,Name from information group by id having mod(id,2) = 1;
+----+--------+
| id | Name   |
+----+--------+
| 1  | Gaurav |
| 3  | Rahul  |
| 5  | Aryan  |
+----+--------+
3 rows in set (0.09 sec)

クエリの仕組み

このクエリがどのように動作しているのか、ポイントを順に見ていきましょう。

  • mod(id, 2) = 1:MOD関数は、idを2で割った余りを返します。余りが1になるのは奇数のidだけなので、結果として奇数番号のレコードのみが抽出されます。
  • GROUP BY id:idごとにレコードをグループ化しています。
  • HAVING句:グループ化された後のデータに対して条件を適用します。WHERE句ではこのような条件フィルタリングが適切に行えないため、HAVINGを使用します。

なお、逆に偶数番号のレコードを取得したい場合は、条件を mod(id, 2) = 0 に変更するだけで対応できます。このテクニックを覚えておくと、レコードのサンプリングやデータの分割表示など、さまざまな場面で活用できます。

  1. MySQLデータベースの列から一意(ユニーク)なレコード数をカウントする方法

    MySQLである列に含まれる重複しない(一意の)レコード数を集計したい場合は、集計関数 COUNT(DISTINCT ...) を GROUP BY 句と組み合わせて使用します。これにより、ユーザーごとの投稿メッセージ数のように、グループ単位での一意レコード数を簡単に取得できます。実際にサンプルを使って確認してみましょう。1. サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable ( UserName varchar(100), UserPostMessage text ); Query OK,

  2. MySQLテーブルから新しく追加されたレコードを取得する方法

    MySQLでテーブルに新しく追加されたレコードを取得するには、ORDER BY句とLIMIT句を組み合わせて使用します。AUTO_INCREMENTで採番される主キー(ID)を基準に降順(DESC)で並べ替え、LIMITで取得件数を指定することで、最新のレコードだけを効率的に取り出せます。 サンプルテーブルの作成 まず、CREATE TABLE文でテーブルを作成します。ここでは、自動採番される「StudentId」を主キーとする学生テーブルを用意しました。 mysql> create table DemoTable1486 -> ( -> StudentId