- PR -

ソート番号を振りたい(mysql)

1
投稿者投稿内容
もじそんすくえあ
会議室デビュー日: 2004/10/20
投稿数: 15
投稿日時: 2006-02-24 10:42
データ毎にソート番号を振りたいのですが、
SQLで振る方法はありますでしょうか?

cola sort
0001 1
0001 2
0001 3
0002 1 ←ここで1になる
0003 1 ←colaの値が変わったので1から振る
0003 2

よろしくお願いします。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2006-02-24 11:19
select句での相関サブクエリか、
自己結合を使えばできます

もじそんすくえあ
会議室デビュー日: 2004/10/20
投稿数: 15
投稿日時: 2006-02-24 11:21
具体的に教えて頂けますか?
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-02-24 11:35
検索語
SQL 番号を振りたい グループ
のサンプルを mysql で書き直します。 以上
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-02-24 12:27

ユーザ変数を使った形ですとこんな感じになります。

(test3が対象テーブルでcol1が列になります)
コード:
set @cola = "" ;
set @num = 1 ;

SELECT 
  case col1 when @cola then @num := @num + 1 else @num := 1 end AS "SET NUM",
  case col1 != @cola when true then @cola := col1 end "SET COL",
  col1, @num 
from test3 ;




1) SETで列と番号の初期値を設定。
colaは表示した列の値を保持、numは番号を保持
2) SELECTのCASE式で colaの変数と列の値が一緒の場合、numを1加算、そうでないばあい0にする。
colaと列の値が等しくない場合は、colaの値を設定しなおす。
その上で、列とnumの値を表示

コード:
+---------+---------+------+------+
| SET NUM | SET COL | col1 | @num |
+---------+---------+------+------+
|       1 | 1       | 1    | 1    |
|       2 | NULL    | 1    | 2    |
|       3 | NULL    | 1    | 3    |
|       1 | 2       | 2    | 1    |
|       1 | 3       | 3    | 1    |
|       2 | NULL    | 3    | 2    |
+---------+---------+------+------+
6 rows in set (0.00 sec)

もじそんすくえあ
会議室デビュー日: 2004/10/20
投稿数: 15
投稿日時: 2006-02-24 14:29
ありがとうございました。
できました。
1

スキルアップ/キャリアアップ(JOB@IT)