• 締切済み

MySQLで行番号を得たい

MySQLでOracleのROW_NUMBER関数に相当する結果を得る方法はありますか? 具体的にはあるテーブルからソートしつつ得た結果を、空のテーブルにソート順位付きでinsertしたいのです。 宜しくお願い致します。

みんなの回答

  • MeijiK
  • ベストアンサー率100% (3/3)
回答No.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)

回答No.2

バージョンが古すぎると実行できないかも知れませんが、以下の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)
回答No.1

行番号はよくわかりませんがソート順位だけなら 新しいDBの方にauto_incrementのフィールドをつけて ヌルをながしこめばよいと思います。 insert into `y` select *,NULL from `x`

TACA
質問者

お礼

条件で分けられた各集計結果を一つのテーブルに収納したいので、Auto_incrementでは通番になってしまい集計別の順位は取れないので、敢えて質問させていただきました。 whereで切ってincrementされた値をソートすれば一応順位が取れるのでよいのですが、できれば数字を1から振りなおせればと思ったのです。 ありがとうございました。