首页 > 解决方案 > 来自组的 Postgresql Max

问题描述

尝试将标志添加到每个 objectid 中的最大 bscmpnstntotal。这是薪酬数据,其中 objectid 代表特定组织,bscmpnstntotal 等于给定员工的总薪酬。我想要一个标志,指定每个组织中收入最高的人是谁:

    WITH "return_skdjrltdorgoffcrtrstkyempl"
AS
(
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY object_id ORDER BY bscmpnstntotal DESC) AS GroupRank
    FROM ctetable
)
UPDATE "return_skdjrltdorgoffcrtrstkyempl"
SET highestpaidflag2 = CASE WHEN GroupRank = 1 THEN 1 ELSE 0 END;

我得到的错误是

错误:关系“ctetable”不存在

表结构: 在此处输入图像描述

标签: postgresql

解决方案


哇,什么名字。

问题是您将 CTE 命名为与表相同(我相信),并且表“遮蔽”了 CTE。您收到错误消息,因为该表return_skdjrltdorgoffcrtrstkyempl没有名为 的列grouprank

您必须为 CTE 选择一个不同的名称并将其与UPDATE语句中的表连接起来(使用UPDATE ... FROM):

WITH shortname AS (...)
UPDATE ctetable
SET ...
FROM shortname
WHERE shortname.id = ctetable.id;

不过,我的建议是不要将该信息保存在数据库中。如果表数据发生变化,信息不会失效吗?随时根据表格数据计算。


推荐阅读