1

我想出了如何一次处理一个字段(请参阅下面的两个更新查询)。有没有办法在一个查询中做到这一点?

UPDATE upload_data sd
SET
  photo_count =
  (SELECT sum(photo_count) 
  FROM media_uploads mu
  WHERE mu.user_id=sd.user_id
  AND mu.date=current_date
  GROUP BY mu.user_id);


UPDATE upload_data sd
SET
  video_count =
  (SELECT sum(video_count) 
  FROM media_uploads mu
  WHERE mu.user_id=sd.user_id
  AND date_trunc('month', mu.date)=date_trunc('month', sd.date)
  GROUP BY mu.user_id);
4

1 回答 1

2

我认为你可以通过JOINwith来做到这一点UPDATE。在 postgresql 中作为UPDATE语法,它将是这样的:

UPDATE upload_data sd
SET  sd.photo_count = m.photo_count,
     sd.video_count = m.video_count
FROM
(
  SELECT 
    user_id, 
    sum(photo_count) AS  photo_count, 
    SUM(video_count) AS video_count
  FROM media_uploads 
  WHERE mu.date = current_date
  GROUP BY user_id
) AS m 
WHERE m.user_id = sd.user_id;
于 2013-02-05T06:22:56.637 回答