Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

mysql With 사용해서 조회 경험

MYSQL, 20252 min read

배경

이벤트 와 기부 정보는 서로 역일 수 있는 key 는 member_id 입니다 이벤트를 참여한 사람의 기부 정보도 보여주고 또한 참여한 이벤트도 보여달라는 요청이 왔습니다

WITH 절

join이 어려운 구조이며 계층적/순차적인 계산하거나 중간 결과 재사용하는 경우

ex) 테이블 간 물리적 외래 키 연결은 없지만 user_id 같은 공통 키로 묶을 수 있는 경우

예시

각 회원별로 총 주문 금액을 알고 싶고, 총액이 1,000 이상인 회원만 보고 싶다.

WITH user_order_totals AS (
SELECT user_id, SUM(price) AS total_amount
FROM orders
GROUP BY user_id
)
SELECT *
FROM user_order_totals
WHERE total_amount >= 1000;

문제

문제는 이벤트,이벤트참여정보,이벤트체택정보 3개 테이블을 left join 했더니 member_id 가 복수가 나왔고 기부 정보 또한 늘어나는 문제가 있었습니다

기부도 복수, 이벤트 참여도 복수라면 결과가 곱집합처럼 늘어났다 단순히 join 과 with 으로 해결할 수 없고 더 복잡해졌다

결국 요청한 사용자가 기부를 많이한 기부자나,채택이 된 경우 등 보고 싶은 욕구로 요청이 들어왔기 때문에 나눠서 쿼리 결과를 전달했다

  1. '2025-03-25' 특정 날짜에 이벤트 참여자 리스트 (채택 여부 확인)
  2. '2025-03-25' 특정 날짜에 이벤트 참여자의 기부 리스트
  3. 특정 회원의 기부 리스트
© 2025 by GwiyeomGo Tech Blog. All rights reserved.