首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新重复列值以从单独的列追加排序索引

更新重复列值以从单独的列追加排序索引
EN

Stack Overflow用户
提问于 2021-01-12 05:15:14
回答 2查看 28关注 0票数 0

我有一个包含namepopularity列的person表。我正在尝试找出我可以运行哪个name命令来使用它们的相对popularity值的附加排序索引来更新重复的SQL值。如果可能的话,如果具有顶级排序索引1的重复names保持原样并且不进行更新,那也是很好的。我一直在研究ARRAY_AGGGROUP BYHAVING COUNT(*) > 1RANK () OVERPARTITION BY,但缺乏将它们整合成有效解决方案的SQL专业知识。我怀疑我的想法可能完全错了。任何帮助或指导都将不胜感激!

示例

代码语言:javascript
复制
id    name    popularity
0     jane    1.5
1     joe     0.5
2     jane    0.0
3     jane    0.0
4     joe     1.4
5     emily   0.5

期望的结果

代码语言:javascript
复制
id    name    popularity
0     jane    1.5
1     joe-2   0.5
2     jane-2  0.0
3     jane-3  0.0
4     joe     1.4
5     emily   0.5
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-12 05:42:49

您可以使用row_number()枚举重复的名称,然后使用join将此信息附加到每一行:

代码语言:javascript
复制
update person p
    set name = name || '-' || seqnum
    from (select p.*,
                 row_number() over (partition by name order by popularity desc, id) as seqnum
          from person p
         ) pp
    where pp.id = p.id and seqnum > 1;
票数 1
EN

Stack Overflow用户

发布于 2021-01-12 05:34:22

代码语言:javascript
复制
select
    *,
    row_number() over (partition by name order by popularity) as num,
    name || '-' || (row_number() over (partition by name order by popularity))::text as name_new
from person;

使用UPDATE ... FROM ...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65674631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档