sql - 内连接更新集postgresql

标签 sql postgresql group-by

所以我想在囚犯工作的天数总和与特定任务的乘积系数之间进行乘积。 我试过这段代码:

UPDATE prisoners
    SET nr_days_equaled = (SELECT COALESCE (multiplication_coefficient*SUM(nr_days_worked),0)
                           FROM prisoners pr 
                              INNER JOIN timesheets_prisoners tp ON pr.idprisoner= tp.idprisoner 
                              INNER JOIN nomenclature_activities_prisoners nap ON pp.idactivity=nap.idactivity)

但是我得到以下错误:

column "nap.multiplication_coefficient" must appear in the GROUP BY clause or be used in an aggregate function

我能做什么?有什么想法吗?

最佳答案

欢迎使用 StackOverflow。

在选择语句中将任何聚合函数(SUM、COUNT、MIN MAX 等)与任何其他字段一起使用时,必须按其他所选字段进行 GROUP。所以在你的情况下,编译器想要:

UPDATE prisoners
SET nr_days_equaled = 
(SELECT COALESCE (multiplication_coefficient*SUM(nr_days_worked),0)
FROM prisoners pr INNER JOIN timesheets_prisoners tp 
ON pr.idprisoner= tp.idprisoner 
INNER JOIN nomenclature_activities_prisoners nap 
ON pp.idactivity=nap.idactivity GROUP BY multiplication_coefficient)

但是,在没有看到您的表的内部结构的情况下,我怀疑这并不是您真正想要的。我怀疑你真的需要

SET nr_days_equaled = 
(SELECT COALESCE (SUM(multiplication_coefficient*nr_days_worked),0)
FROM prisoners pr INNER JOIN timesheets_prisoners tp 
ON pr.idprisoner= tp.idprisoner 
INNER JOIN nomenclature_activities_prisoners nap 
ON pp.idactivity=nap.idactivity)

不同的是,这个版本允许不同的工作有不同的乘法系数,但仍然是总和。我强调我不确定。请在发布 UPDATE 之前将其转换为 SELECT 语句进行测试。

编辑

看过结构,你需要的是:

UPDATE prisoners
SET nr_days_equaled = SubQ.sumdaysmult
FROM
(SELECT pr.idprisoner, COALESCE (ppnap.sumdaysmult, 0) AS sumdaysmult FROM 
FROM prisoners pr LEFT JOIN (SELECT tp.idprisoner, SUM(tp.nr_days_worked
* nap.multiplication_coefficient) as sumdaysmult
FROM timesheets_prisoners tp 
INNER JOIN nomenclature_activities_prisoners nap 
ON tp.idactivity=nap.idactivity GROUP BY tp.idprisoner) tpnap
ON tpnap.idprisoner = pr.idprisoner) AS SubQ
WHERE SubQ.idprisoner = prisoners.idprisoner

关于sql - 内连接更新集postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44917909/

相关文章:

mysql - SQL组按位设置?

sql - 使用子查询优化聚合 postgres 查询

sql - SELECT with OR 使用带索引的两列非常慢

mysql - 如何在sql中过滤子类别的id

node.js - 重置 Sequelize 数据库

PostgreSQL 全文搜索标题不包含足够的上下文

sql - 导入 pg_dump sql 文件时出现语法错误

mysql - 从 SQL 查询中的两列中查找唯一的首字母

c# - 在 LINQ 中表达组查询时遇到问题

mysql - 统计mysql中各组的总体结果