- 締切済み
MySQLで行番号を得たい
MySQLでOracleのROW_NUMBER関数に相当する結果を得る方法はありますか? 具体的にはあるテーブルからソートしつつ得た結果を、空のテーブルにソート順位付きでinsertしたいのです。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- MeijiK
- ベストアンサー率100% (3/3)
MySQLの場合、ユーザ変数を使うと簡単にできます。表empに、給料額を入れたsalというカラムがあり、それをソートしてrownumを付けるには以下のようにします。 mysql> set @rownum = 0; select @rownum := @rownum + 1 rownum, sal from emp order by sal; Query OK, 0 rows affected (0.00 sec) +--------+------+ | rownum | sal | +--------+------+ | 1 | 800 | | 2 | 950 | | 3 | 1100 | | 4 | 1250 | | 5 | 1250 | | 6 | 1300 | | 7 | 1500 | | 8 | 1600 | | 9 | 2450 | | 10 | 2850 | | 11 | 2975 | | 12 | 3000 | | 13 | 3000 | | 14 | 5000 | +--------+------+ 14 rows in set (0.00 sec)
- chukenkenkou
- ベストアンサー率43% (833/1926)
バージョンが古すぎると実行できないかも知れませんが、以下のSQLではいかがでしょうか? INSERT INTO T2(ROWNUM,C1,C2) SELECT (SELECT COUNT(*)+1 FROM T1 WHERE C1<X.C1) AS ROWNUM,X.C1,X.C2 FROM T1 AS X ORDER BY X.C1;
- yambejp
- ベストアンサー率51% (3827/7415)
行番号はよくわかりませんがソート順位だけなら 新しいDBの方にauto_incrementのフィールドをつけて ヌルをながしこめばよいと思います。 insert into `y` select *,NULL from `x`
お礼
条件で分けられた各集計結果を一つのテーブルに収納したいので、Auto_incrementでは通番になってしまい集計別の順位は取れないので、敢えて質問させていただきました。 whereで切ってincrementされた値をソートすれば一応順位が取れるのでよいのですが、できれば数字を1から振りなおせればと思ったのです。 ありがとうございました。