アプリ版:「スタンプのみでお礼する」機能のリリースについて

MySQLでOracleのROW_NUMBER関数に相当する結果を得る方法はありますか?

具体的にはあるテーブルからソートしつつ得た結果を、空のテーブルにソート順位付きでinsertしたいのです。

宜しくお願い致します。

A 回答 (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)
    • good
    • 0

バージョンが古すぎると実行できないかも知れませんが、以下の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;
    • good
    • 0

行番号はよくわかりませんがソート順位だけなら


新しいDBの方にauto_incrementのフィールドをつけて
ヌルをながしこめばよいと思います。

insert into `y` select *,NULL from `x`
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2006/01/21 18:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!