ここでは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)