MySQLで検索結果に連番を振る方法

こんにちは、さるまりんです。

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_number1ずつインクリメントしながら、WHEREで指定された条件で結果を抽出していっています。

MySQL 8.0以降であればROW_NUMBER()関数が使えるようで↓のようなSQLで連番を振ることができます。

↓のSQLで同じようなことができます。

SELECT ROW_NUMBER() OVER() as no, customer_code
FROM customers
WHERE zip_code like '11%';

検索の条件によってはOVER()に指定するものを気をつけないといけないようです。

連番っていろんなところで必要になるので、簡単に取得できる方法をいろいろ覚えていたいものです。

読んでくださってありがとうございました。

それではまた!