将字段更新为一对多关系字段总和

时间:2019-10-24 10:12:48

标签: sql postgresql

我在现有表中添加了一个字段,现在我必须更新旧条目以具有正确的值。

UPDATE shift_job 
SET elapsed_time = ROUND(EXTRACT(EPOCH FROM actual_end_time - actual_start_time)/60):

ALTER TABLE shift_worker ADD COLUMN actual_work_duration integer NULL;
UPDATE shift_worker
SET actual_work_duration = SUM(SELECT elapsed_time
FROM shift_job 
WHERE shift_worker_id = shift_worker.id);

我计算了工作的经过时间,效果很好。当试图为工人计算actual_work_duration时,我遇到了问题。我需要对所有“ elapsed_time”字段求和,其中shift_worker.id = shift_job.shift_worker_id。

我该如何实现?

2 个答案:

答案 0 :(得分:1)

UPDATE shift_worker
SET actual_work_duration = (SELECT SUM(elapsed_time)
FROM shift_job 
WHERE shift_worker_id = shift_worker.id);

答案 1 :(得分:1)

您可以在派生表中进行聚合,然后在UPDATE语句中加入聚合。

UPDATE shift_worker
  SET actual_work_duration = t.total_time
FROM (
  select shift_worker_id, SUM(elapsed_time) as total_time
  FROM shift_job 
  group by shift_worker_id
) t
WHERE t.shift_worker_id = shift_worker.id;

这通常比使用相关的子查询要快得多。