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 서브쿼리 조합을 사용하면 된다.