あるカラムで重複している値をカウントし、その値を用いて別カラムをUPDATEする方法について
解決したいこと
重複した値のカウント値を使って他カラムの値をUPDATEする方法について、
SQLのみでどうやって実現できるのか知りたいです!
前提
-
id
カラムは複数の重複データが存在する(何個重複しているかは不明)
-
id
カラムは歯抜けになっている可能性あり
-
another_id
カラムは全てnull値
初期テーブル
id | another_id |
---|---|
1 | null |
1 | null |
1 | null |
2 | null |
2 | null |
2 | null |
2 | null |
... | ... |
N | null |
- another_idカラムには下記のような重複値のcount値をSETしたい
更新前
id | another_id | duplicate_cnt |
---|---|---|
1 | null | 1 |
1 | null | 2 |
1 | null | 3 |
2 | null | 1 |
2 | null | 2 |
2 | null | 3 |
2 | null | 4 |
... | ... | ... |
N | null | X |
↓
更新後(やりたいこと)
id | another_id | duplicate_cnt |
---|---|---|
1 | 1 | 1 |
1 | 2 | 2 |
1 | 3 | 3 |
2 | 1 | 1 |
2 | 2 | 2 |
2 | 3 | 3 |
2 | 4 | 4 |
... | ... | ... |
N | X | X |
自分で試したこと
- Stackoverflow に掲載されているSQLで、count値を取得することまではできた
SELECT
t.*,
@i:=IF(id=@id, @i+1, 1) AS num,
@id:=id
FROM
t
CROSS JOIN (SELECT @i:=0, @id:=0) AS init
ORDER BY id
- 上記SQLをサブクエリと使用する?しかし、全てのレコード件数に対しての複数値を返すので、それをどう使って
another_id
カラムをUPDATEしたらよいのかわからない
以上です。単なるSQLの知識不足は否めないのですが、ぜひとも解決方法を知って知識にしたいので、ご教授頂けると幸いです!
0