繁体   English   中英

组的Postgresql Max

[英]Postgresql Max From Group

尝试将标志添加到每个对象ID的最大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”不存在

表结构: 在此处输入图片说明

哇,什么名字。

问题在于,您为CTE命名的方式与表相同(我相信),而表“遮盖了” CTE。 您收到错误消息,因为表return_skdjrltdorgoffcrtrstkyempl没有名为grouprank的列。

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

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

不过,我的建议是不要将该信息保留在数据库中。 如果表数据更改,信息不会无效吗? 在需要时根据表数据进行计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM