如何使用序列号自动填充列,但基于参数?

Posted

技术标签:

【中文标题】如何使用序列号自动填充列,但基于参数?【英文标题】:How to autofill a column with sequential number, but based on a parameter? 【发布时间】:2022-01-16 13:58:53 【问题描述】:

我正在尝试向几个 mysql (MariaDB) 表添加一个新列。我想让列自动填充序列号。到目前为止,我想出的是:

SELECT @count:=0;
UPDATE users SET ordering = @count:=@count+1;

完美运行。但是,我不知道如何使数字的分配顺序基于另一个值,即另一个名为regdate 的整数字段的升序。这是一个例子。

当前结果:

login regdate ordering
user 1633205589 1
guy 16332060000 3
account 16332090000 2
data 16332095000 4

我想要什么:

login regdate ordering
user 1633205589 1
guy 16332060000 2
account 16332090000 3
data 16332095000 4

我希望它非常清晰简洁:)

【问题讨论】:

【参考方案1】:

只要你的更新只涉及单个表,你就可以指定一个顺序:

UPDATE users SET ordering = @count:=@count+1 ORDER BY regdate;

【讨论】:

它就像一个魅力,没想到它这么简单。谢谢!【参考方案2】:

您可以使用带有 ROW_NUMBER 的联接表

CREATE TABLE users (
  `login` VARCHAR(7),
  `regdate` VARCHAR(20) ,
  `ordering` INTEGER
);
INSERT INTO users
  (`login`, `regdate`, `ordering`)
VALUES
  ('user', '1633205589', '1'),
  ('guy', '16332060000', '3'),
  ('account', '16332090000', '2'),
  ('data', '16332095000', '4');
UPDATE users  u1
JOIN (SELECT `login`, `regdate`, row_number() over (ORDER BY regdate ASC) rn FROM users) u2 
ON u1.`login` = u2.`login` AND u1.`regdate` = u2.`regdate`
SET u1.ordering =  u2.rn ;
SELECT * FROM users
登录 |注册日期 |订购 :-------- | :------------ | --------: 用户 | 1633205589 | 1 家伙 | 16332060000 | 2 帐户 | 16332090000 | 3 数据 | 16332095000 | 4

db小提琴here

【讨论】:

这个也可以,结果完全正确,谢谢

以上是关于如何使用序列号自动填充列,但基于参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何指定使用自动适应/填充创建的最大列数重复()? [复制]

基于列的Excel flash自动填充行

当我在Excel中输入特定值时如何自动填充数据?

VBA - 如何自动填充到底部,直到最后一个 B 单元格包含数据

如何让Excel自动编号及序号自动填充

如何使用 R 中基于面板数据的客户 ID 的所有列的中值插补填充缺失值?