Postgresql Max From Group

问题描述 投票:0回答:1

试图在每个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”不存在

表结构:enter image description here

postgresql
1个回答
2
投票

哇,什么名字。

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

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

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

不过,我的建议是不要在数据库中保留这些信息。如果表数据发生变化,信息是否会无效?无论何时需要,都可以从表格数据中计算出来。

© www.soinside.com 2019 - 2024. All rights reserved.