[PostgreSQL] UPDATE FROM 서브쿼리로 집계값 반영하기 (SUM + JOIN 업데이트)

PostgreSQL에서 다른 테이블의 값을 이용해 UPDATE를 해야 할 때가 많다.
특히 집계(SUM) 결과를 반영하는 UPDATE는 처음 보면 헷갈린다.

이 글에서는 실제 쿼리 예제를 기준으로
UPDATE FROM + 서브쿼리 + 집계 패턴을 정리한다.


기본 구조: UPDATE FROM JOIN

PostgreSQL에서는 UPDATE ... FROM 구문을 사용하면
다른 테이블과 JOIN해서 값을 업데이트할 수 있다.

기본 예제

UPDATE 테이블A AS t1
SET amt = amt - t2.tot_amt
FROM 테이블B AS t2
WHERE t1.key_seq = t2.key_seq
AND t1.company_code = t2.company_code;

핵심 포인트

  • FROM으로 다른 테이블 참조 가능
  • WHERE에서 JOIN 조건 작성
  • SET에서 다른 테이블 컬럼 사용 가능

👉 즉, UPDATE + JOIN을 동시에 처리


문제 상황: 집계 데이터를 반영해야 하는 경우

단순 JOIN이 아니라 이런 케이스:

  • 결제 데이터 여러 건 존재
  • 해당 금액을 SUM으로 합산
  • 그 결과를 기준 테이블에서 차감

👉 이럴 때는 서브쿼리 + GROUP BY가 필요


실무 쿼리

UPDATE 테이블A AS t1
SET amt = amt - t2.tot_amt
FROM (
SELECT
cap.key_seq,
user.company_code,
SUM(cap.amt) AS tot_amt
FROM 결제테이블 cap
JOIN 유저테이블 "user"
ON cap.user_key = "user".user_key
WHERE cap.trk_no IN (운송장번호)
GROUP BY cap.key_seq, user.company_code
) AS t2
WHERE t1.key_seq = t2.key_seq
AND t1.company_code = t2.company_code;

언제 쓰는 패턴인가

이 쿼리는 이런 상황에서 사용된다:

  • 정산 데이터 차감
  • 포인트 차감
  • 재고 감소 처리
  • 집계 기반 업데이트

👉 “여러 건 → 합산 → 1건 반영”


한 줄 정리

👉 PostgreSQL에서 집계값으로 UPDATE하려면
UPDATE + FROM + GROUP BY 서브쿼리 조합을 사용하면 된다.

답글 남기기