将row_number添加到最大值

塔拉纳基

这是我的问题的简化版本(我无法提出一个在现实生活中有意义的示例)。

假设我有一个餐桌人

表人


ID       Name        Number     Category
1        Follett     null       Thriller
2        Rowling     null       Fantasy
3        Martin      80         Fantasy
4        Cage        55         Thriller
5        Baldacci    null       Thriller

现在,我想获得以下结果:


ID       Name        Number     Category
1        Follett     56         Thriller
2        Rowling     81         Fantasy
3        Martin      80         Fantasy
4        Cage        55         Thriller
5        Baldacci    57         Thriller
  1. 按类别分组
  2. 选择每个类别的最大数值
  3. 将row_number(按类别划分)添加到该数字,并设置新值,(仅对之前为null的Numbers进行设置)。

到目前为止,我所拥有的部分(不工作,更多地说明我想做的事情,我知道为什么这可能行不通)


UPDATE Person P
SET Number = sub.current + sub.row
FROM (
  SELECT
   Id,
   max(Number) as current,
   (ROW_NUMBER() OVER(PARTITION BY Category)) AS row
  FROM Person
  GROUP BY Category
) as sub
WHERE P.Id = sub.Id

注意:对于某个类别的所有Numbers为null的特殊情况,max(Number)应该只是0,而新值应该只是row_numbers()。

我正在使用Postgresql。

戈登·利诺夫(Gordon Linoff)

您可以select使用来获取值

select p.*,
       (coalesce(max(number) over (partition by category), 0) +
        row_number() over (partition by category order by number)
       ) as newnumber
from person p;

然后,您可以将其放在update语句中,如下所示:

update person
    set number = pp.newnumber
    from (select p.*,
           (coalesce(max(number) over (partition by category), 0) +
            row_number() over (partition by category order by number)
           ) as newnumber
          from person p
         ) pp
    where pp.id = p.id and p.number is null;

注意:如果您尝试创建一个唯一值,则可能不起作用。特定类别的序号可能与另一类别的序号冲突。如果这是您要尝试执行的操作,请询问另一个具有更多详细信息的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数学-将百分比添加到值上,但限制为最大值?

来自分类Dev

将row_number添加到数据帧pyspark中的级联列

来自分类Dev

SQL ROW_NUMBER添加到变量

来自分类Dev

AngularJS-如何突出显示/将类添加到最大值

来自分类Dev

MYSQL将1添加到substring_index中的最大值

来自分类Dev

将最大值添加到R中的新列

来自分类Dev

如何将最小值和最大值添加到我的Vue计数值

来自分类Dev

将样本大小添加到 ggplot 中分面的最小值或最大值处的箱线图中

来自分类Dev

当数量最大值为0(Shopify)时隐藏“添加到购物车”按钮

来自分类Dev

根据列中的正则表达式语法,将变量添加到包含每一行最大值的数据框中

来自分类Dev

将列添加到pandas数据框中,其中包含每一行的最大值以及相应的列名

来自分类Dev

AngularJs ng-repeat 將顏色添加到受尊重列中單元格的最大值

来自分类Dev

将值添加到对象数组

来自分类Dev

Django将值添加到ForeignKey

来自分类Dev

将空值添加到arraylist

来自分类Dev

将值添加到分组列

来自分类Dev

将JSON添加到选项值

来自分类Dev

将重复的值添加到BindingList

来自分类Dev

将字典值添加到列表?

来自分类Dev

将生成的值添加到RealmObject

来自分类Dev

将$符号添加到列值

来自分类Dev

将值添加到json元素

来自分类Dev

将值添加到行ItemArray

来自分类Dev

将JSON添加到选项值

来自分类Dev

将值添加到元组

来自分类Dev

将数组值添加到ArrayList

来自分类Dev

将生成的值添加到RealmObject

来自分类Dev

将值添加到json数组

来自分类Dev

Javascript for() 将值添加到数组