- ベストアンサー
抽出結果にレコードNoを付与することは可能?
- 抽出結果に先頭から連番を振る方法について質問です。具体的には、MySQLのバージョン5.0.18を使用しています。抽出結果にレコードNoを付与したいと考えていますが、順位を付けたいのではなく、単純に連番を振りたいです。
- 例えば、テーブル名がtest_tableで、カラムがkeys、data、valueの場合、以下のような抽出クエリを実行します。'keys'カラムには002が含まれているレコードを抽出し、'value'カラムで降順に並び替え、'data'カラムで昇順に並び替えます。
- 抽出結果を表示する際に、レコードNoとして連番を表示したいです。具体的には、抽出結果の先頭から順に数字を振っていき、新たに'rec_no'というカラムを追加したいです。このような方法でレコードNoを付与することは可能でしょうか?一時テーブルは使用したくありませんが、ビューを使用することは許可されています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1回答者です。 MySQLのバージョンが5.0系とのことなので、ストアド・プロシジャを利用する方法もあります。 以下の関数は、変数@nを使用し、関数が呼ばれるたびに+1します。最初に呼ぶときには、変数@nを初期化(0を設定)しておきます。 ●関数の定義 -- drop function user_rownum; delimiter // create function user_rownum() returns smallint begin set @n=@n+1; return @n; end; // delimiter ; ●関数の利用 set @n=0; select `keys`,`data`,`value`,user_rownum() from `test_table` where `keys` like '%002' order by `value` desc,`data` asc;
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
SQL例です。 select x.`keys`,x.`data`,x.`value`, (select count(*)+1 from test_table where `keys`<x.`keys` and `keys` like '%002' ) as rec_no from test_table as x where `keys` like '%002' order by `value` desc,`data` asc;
お礼
お礼が遅れました もうしわけございません なるほど select カラム名の、このカラムに selectを入れ子できるとは知りませんでした 勉強になりました ありがとうございました
お礼
デ、デ、出来ました! DETERMINISTICのエラーが出て どこにDETERMINISTICを入れるべきか悩みましたが beginの前に DETERMINISTICを入れることで解決しました delimiter // create function user_rownum() returns smallint DETERMINISTIC begin set @n=@n+1; return @n; end; // functionいいですね 勉強になりました ありがとうございました!