我在现有表中添加了一个字段,现在我必须更新旧条目以具有正确的值。
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。
我该如何实现?
答案 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;
这通常比使用相关的子查询要快得多。