Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自组的Postgresql Max_Postgresql - Fatal编程技术网

来自组的Postgresql Max

来自组的Postgresql Max,postgresql,Postgresql,正在尝试将标志添加到每个objectid中的最大BSCMPNSTOTAL。这是薪酬数据,其中objectid表示一个特定的组织,BSCMPNSTOTAL等于给定员工的总薪酬。我想要一个标志,指定每个组织中谁是薪酬最高的人: WITH "return_skdjrltdorgoffcrtrstkyempl" AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY object_id ORDER BY bscmpn

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

    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\u skdjrltdorgoffcrtrstkyemp
没有名为
grouprank
的列

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

不过,我的建议是不要将这些信息保留在数据库中。如果表数据发生更改,信息不会变得无效吗?只要需要,就从表数据中计算出来。

哇,什么名字

问题是您将CTE命名为与表相同的名称(我相信),而表“阴影”是CTE。您会收到错误消息,因为表
return\u skdjrltdorgoffcrtrstkyemp
没有名为
grouprank
的列

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


不过,我的建议是不要将这些信息保留在数据库中。如果表数据发生更改,信息不会变得无效吗?根据表格数据随时计算出来。

你能发布表格结构吗?@rastik在上面添加,谢谢!你能发布表格结构吗?@rastik在上面添加了,谢谢!这个数据库不会改变,所以我没有问题在它有一个静态标志。是的,名字很不幸。db是给我的,我可能应该更改它们。不过我还是很难理解你的建议。我已经编辑了我在上面尝试的内容。我添加了一些示例代码,希望能更好地解释它。这个数据库不会改变,所以我在其中有一个静态标志没有问题。是的,名字很不幸。db是给我的,我可能应该更改它们。不过我还是很难理解你的建议。我已经编辑了我在上面尝试的内容。我添加了一些示例代码,希望能更好地解释它。
WITH shortname AS (...)
UPDATE ctetable
SET ...
FROM shortname
WHERE shortname.id = ctetable.id;