postgresql - 来自组的 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”不存在
解决方案
哇,什么名字。
问题是您将 CTE 命名为与表相同(我相信),并且表“遮蔽”了 CTE。您收到错误消息,因为该表return_skdjrltdorgoffcrtrstkyempl
没有名为 的列grouprank
。
您必须为 CTE 选择一个不同的名称并将其与UPDATE
语句中的表连接起来(使用UPDATE ... FROM
):
WITH shortname AS (...)
UPDATE ctetable
SET ...
FROM shortname
WHERE shortname.id = ctetable.id;
不过,我的建议是不要将该信息保存在数据库中。如果表数据发生变化,信息不会失效吗?随时根据表格数据计算。
推荐阅读
- vue.js - Nuxt - 无法访问方法内的数据
- python - Python Pandas - 将每个键和值映射到唯一列
- mxgraph - mxcell 中缺少属性
- python - 如何对值进行排序并按降序将其放入数组中?
- firebase - 如何模拟 Firebase 扩展?
- php - PHP - 有什么方法可以区分 unset 和 null 吗?
- javascript - suiteCRM 错误 40 中的 JOIN 子查询,("name":"Access Denied","number":40,"description":"You do not have access")
- docker - Nginx 无法访问 SSL 证书
- arrays - 将字符串添加到数组
- java - Android:如何自动更改视频活动中的方向?