【MySQL】取得結果に行番号(rownum)を振る方法


ここではMySQLで、SELECTした結果に行番号(rownum)を振る方法を紹介しています。

SELECTで取得した結果に行番号(rownum)を振る方法

MySQLには、ORACLEであるrownumが存在しません。

そのため、ここでは変数を宣言して疑似的にrownumを再現しています。

次のSQLでまずrownum変数を宣言します。

mysql> SET @rownum=0;
Query OK, 0 rows affected (0.00 sec)

そして次のようにSELECT句に「@rownum:=@rownum+1」を指定することで行番号を取得しています。

mysql> SELECT @rownum:=@rownum+1,a.* FROM tab1 a;
+--------------------+--------+----------+-------+------+
| @rownum:=@rownum+1 | emp_id | emp_name | dept  | age  |
+--------------------+--------+----------+-------+------+
|                  1 | 00001  | Suzuki   | HR    |   28 |
|                  2 | 00002  | Tanaka   | SALES |   25 |
|                  3 | 00003  | Kizaki   | SALES |   35 |
|                  4 | 00004  | Tanaka   | DEV   |   45 |
|                  5 | 00005  | Kizaki   | DEV   |   55 |
|                  6 | 00006  | Nakata   | DEV   |   35 |
+--------------------+--------+----------+-------+------+
6 rows in set (0.00 sec)

ORDER BY句やLIMIT句と組み合わせるとこんな感じです。

mysql> SET @rownum=0;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @rownum:=@rownum+1,a.* FROM tab1 a ORDER BY a.age LIMIT 3;
+--------------------+--------+----------+-------+------+
| @rownum:=@rownum+1 | emp_id | emp_name | dept  | age  |
+--------------------+--------+----------+-------+------+
|                  1 | 00002  | Tanaka   | SALES |   25 |
|                  2 | 00001  | Suzuki   | HR    |   28 |
|                  3 | 00003  | Kizaki   | SALES |   35 |
+--------------------+--------+----------+-------+------+
3 rows in set (0.00 sec)