列のあるテーブルがあります:(これは50Kレコードの例にすぎません)
Name, Number
Joe Null
Michael Null
Moses Null
1から3のシーケンス番号で番号を更新して、次のようにします。
Name, Number
Joe 1
Michael 2
Moses 3
1つのSQLコマンドでMysqlのSQLでそれを行うにはどうすればよいですか
SET @rank:=0;
update T
set Number=@rank:=@rank+1;
[〜#〜] update [〜#〜]
1つのステートメントを使用する代替方法
UPDATE T
JOIN (SELECT @rank := 0) r
SET Number=@rank:=@rank+1;
私はオンラインで答えを見つけるのに苦労し、上記の情報のいくつかに基づいて次の方法が私のために働いたことを見つけましたが、異なる更新アプローチを使用しました。他の人にも役立つ場合はここに投稿してください。
注:データセットの場合、ランクは1回限りの固定計算であり、変更されません。 MySQLからPythonにデータをプルするたびに計算を実行する手間を省くために、列として追加したかったのです。
私が使用したソリューション:
使用されるサンプル名、rowidは各行の一意の識別子、valueは各行のランクを決定するために使用されるメトリック
SET @rank=0;
CREATE TEMPORARY TABLE rank_temp
AS
(SELECT rowid, value, @rank:=@rank+1 AS rank FROM source_table ORDER BY value ASC);
UPDATE sourcetable a, rank_temp b
SET a.rank = b.rank
WHERE a.rowid = b.rowid;
それは粗雑な方法ですが、私のデータセットで機能しました。
Number
をAUTO_INCREMENTに設定して、番号が生成されるようにすることができます。
ALTER TABLE your_table MODIFY Number INT AUTO_INCREMENT
それ以外には、おそらく以下が必要です:a)ストアドルーチンb)アプリケーションコード