我有一个包含列的表:(这只是一个例子,我有50K记录)
Name, Number
Joe Null
Michael Null
Moses Null
我用1-3中的序列号更新号码,所以它看起来像这样:
Name, Number
Joe 1
Michael 2
Moses 3
如何在一个SQL命令的SQL for Mysql中执行此操作
答案 0 :(得分:96)
SET @rank:=0;
update T
set Number=@rank:=@rank+1;
<强>更新强>
一种陈述的替代方式
UPDATE T
JOIN (SELECT @rank := 0) r
SET Number=@rank:=@rank+1;
答案 1 :(得分:2)
您可以尝试将Number
设置为AUTO_INCREMENT,以便生成数字:
ALTER TABLE your_table MODIFY Number INT AUTO_INCREMENT
除此之外,您可能还需要: a)存储的例程 b)申请代码
答案 2 :(得分:2)
我努力在网上找到答案,并发现以下方法适用于我,基于上面的一些信息,但使用不同的更新方法。发布在这里,以防它也帮助其他人。
注意:对于我的数据集,排名是一次性固定计算,它不会发生变化。我想将它添加为一列,以便在每次将数据从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;
这是一个粗略的方法,但已经处理了我的数据集。
答案 3 :(得分:0)
update `table_name` set `Number`=@rank:=@rank+1
这将完成。谢谢