こんにちは、さるまりんです。
MySQLの検索結果に連番を振ってみたいと思います。
Oracleデータベースだとrownum
という擬似列があってこれが検索結果の抽出順を表してくれるのですが、MySQLではそれがないのでどうするか?
変数を使って以下のようにするのがよさそうです。
テーブルcustomers
よりzip_code
(郵便番号)が11
で始まる顧客のcustomer_code
を連番つきで取得します。
SET @row_number = 0;
SELECT (@row_number:=@row_number + 1) as no, customer_code
FROM customers
WHERE zip_code like '11%';
最初にrow_number
変数を用意して0
で初期化しています。
SELECTの中で(@row_number:=@row_number + 1) as no
としてrow_number
を1
ずつインクリメントしながら、WHEREで指定された条件で結果を抽出していっています。
MySQL 8.0以降であればROW_NUMBER()
関数が使えるようで↓のようなSQLで連番を振ることができます。
↓のSQLで同じようなことができます。
SELECT ROW_NUMBER() OVER() as no, customer_code
FROM customers
WHERE zip_code like '11%';
検索の条件によってはOVER()
に指定するものを気をつけないといけないようです。
連番っていろんなところで必要になるので、簡単に取得できる方法をいろいろ覚えていたいものです。
読んでくださってありがとうございました。
それではまた!