所以我想在囚犯工作的天数总和与特定任务的乘积系数之间进行乘积。 我试过这段代码:
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/