mysql - 用它的前一列值更新表的新列,并用重复值连接 id
问题描述
我有一张表,有 3 列 id,name,new_column 所以我的要求是将名称列值添加到 new_column 但如果 namae 列有重复值,那么 new_column 中的值应该是 id+name 值的组合
表结构
id name new_name (empty column)
1 aaa
2 bbb
3 ccc
4 ddd
5 aaa
6 eee
7 ccc
现在预期的输出
id 名称 new_name(空列)
1 aaa aaa
2 bbb bbb
3 ccc ccc
4 ddd ddd
5 aaa 5aaa (due to duplicate value id + name )
6 eee eee
7 ccc 7ccc (due to duplicate value id + name )
解决方案
如果你的 MySQL 版本支持ROW_NUMBER
+ 窗口函数,你可以尝试使用 that make a seq numberCASE WHEN
来判断是否重复
架构 (MySQL v8.0)
CREATE TABLE T(
id int,
name varchar(50)
);
INSERT INTO T VALUES (1,'aaa');
INSERT INTO T VALUES (2,'bbb');
INSERT INTO T VALUES (3,'ccc');
INSERT INTO T VALUES (4,'ddd');
INSERT INTO T VALUES (5,'aaa');
INSERT INTO T VALUES (6,'eee');
INSERT INTO T VALUES (7,'ccc');
查询 #1
SELECT name,
CASE WHEN rn = 1 THEN name ELSE CONCAT(id,name) END new_name
FROM (
SELECT *,ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) rn
FROM T
) t1
ORDER BY id;
姓名 | 新名字 |
---|---|
啊啊啊 | 啊啊啊 |
bbb | bbb |
ccc | ccc |
ddd | ddd |
啊啊啊 | 5aaa |
eee | eee |
ccc | 7cc |
推荐阅读
- java - 使用 JdbcPagingItemReader Spring Batch 读取第 0 页的问题
- google-app-engine - 从 Google Cloud SDK 接收“错误字符范围”错误
- javascript - 谷歌图表标题对齐和字体大小
- assembly - 我不能完全理解这个汇编代码
- pandas - 我无法在 Windows 10 上从 cmd 安装 pandas,我使用的是 python 3.9
- c++ - 如何在 C++ 中使用 cv::cuda::cvtColor()?
- python - Alpha Vantage 传递多个查询 - 全球报价
- javascript - 单击导航栏项目时如何下划线?
- php - 即使在 php.ini 中安装和启用 PDO 也未找到错误
- java - 没有静态方法元工厂