首页 / 问答 / PostgreSQL如何实现从一个表的字段分组后取最大值更新另一个表关联的字段?

PostgreSQL如何实现从一个表的字段分组后取最大值更新另一个表关联的字段?

SQL 字段 PostgreSQL 1.45K 次浏览
0

在PostgreSQL数据库中,有一个类似如下的字段:

id  integer
sumqty numeric
maxqty  numeric

idsumqty这两列会被其他函数或者外部程序频繁更新。现在需要编写一个SQL语句,来按id分组并获取sumqty列的最大值,最后将其更新到axqty列。

比如有如下的示例数据:

id, sumqty, maxqty
5    20
5    10
5    45
3    20
1    12
1    2.5

期望得到的更新数据:

id, sumqty, maxqty
5    20      45
5    10      45
5    45      45
3    20      20
1    12      12
1    2.5     12

尝试着编写如下的SQL语句来更新maxqty列的数据:

update A set maxqty= (select MAX(sumqty)  OVER (PARTITION BY id))

但执行结果不正确,应该如何编写PostgreSQL数据库的SQL语句以实现以上的需求呢?

回复 [×]
提交评论
请输入评论内容

2 个回答

  • 0

    如果要求SQL语句的效率更高,则可以使用CTE来实现:

    创建示例表并写入测试数据:

    执行结果:

    id no sumqty maxqty
    1 5 20 45
    2 5 10 45
    3 5 45 45
    4 3 20 20
    5 1 12 12
    6 1 2.5 12
    Rector的个人主页

    Rector

    2023-05-05 回答

    • 0

      可以使用PostgreSQL子查询来实现从一个表的数据更新另一个表的字段值,示例如下:

      输出结果:

      Rector的个人主页

      Rector

      2023-05-05 回答

      我来回答