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 に変更するだけで対応できます。このテクニックを覚えておくと、レコードのサンプリングやデータの分割表示など、さまざまな場面で活用できます。
-
MySQLデータベースの列から一意(ユニーク)なレコード数をカウントする方法
MySQLである列に含まれる重複しない(一意の)レコード数を集計したい場合は、集計関数 COUNT(DISTINCT ...) を GROUP BY 句と組み合わせて使用します。これにより、ユーザーごとの投稿メッセージ数のように、グループ単位での一意レコード数を簡単に取得できます。実際にサンプルを使って確認してみましょう。1. サンプルテーブルを作成するまず、以下のコマンドでテーブルを作成します。mysql> create table DemoTable ( UserName varchar(100), UserPostMessage text ); Query OK,
-
MySQLテーブルから新しく追加されたレコードを取得する方法
MySQLでテーブルに新しく追加されたレコードを取得するには、ORDER BY句とLIMIT句を組み合わせて使用します。AUTO_INCREMENTで採番される主キー(ID)を基準に降順(DESC)で並べ替え、LIMITで取得件数を指定することで、最新のレコードだけを効率的に取り出せます。 サンプルテーブルの作成 まず、CREATE TABLE文でテーブルを作成します。ここでは、自動採番される「StudentId」を主キーとする学生テーブルを用意しました。 mysql> create table DemoTable1486 -> ( -> StudentId