반응형
💡 문제)
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.
  1. 회원 ID, 닉네임, 총거래금액을 조회
    SELECT B.USER_ID, B.NICKNAME, SUM(A.PRICE) AS TOTAL_SALES
    문제에서 주어진 쿼리 결과대로 총거래금액의 출력 시 이름을 TOTAL_SALES로 바꾸어준다.

  2. USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서
    테이블 두개가 연결되어야 함을 알 수 있다. 테이블을 보면 USER_ID에 대해서 중복된 것을 알 수 있다 (컬럼이름은 각 테이블에서 다르지만, 결국은 USER의 아이디를 가리키고 있음)
    따라서 두 테이블을 유저 아이디에 대한 조건으로 INNER JOIN시켜야 한다.
    그래야 각 상품 목록에 대해서 유저의 정보를 함께 출력하는 테이블을 얻을 수 있기 때문이다.
    FROM USED_GOODS_BOARD A JOIN USED_GOODS_USER B ON A.WRITER_ID=B.USER_ID

  3. 완료된 중고 거래의
    위의 2번까지를 통해 각 상품에 대한 유저 정보까지 합친 테이블을 얻었으니, 이제 그 중에서도 완료된 거래에 대해서만 추려야 한다.
    그러러면 WHERE 절을 이용해서 STATUS가 DONE인 것만을 가져올 수 있다.
    WHERE A.STATUS="DONE"

  4. 총금액이 70만 원 이상인 사람의
    위의 과정까지는 각 상품에 대해서 개별적으로 조회되기 때문에, 한 사람의 전체 거래 내역을 고려하기 위해서는 사람의 단위로 GROUP을 지어야 한다.
    따라서 GROUP BY 절을 통해 USER_ID 별로 그룹화 시킨다.
    그러면 거래가 완료된 상품의 거래 주인의 아이디, 이름, 총거래금액이 출력되는데, 이 중에서도 조건에서 총거래금액이 70만원 이상인 사람의 것만 출력하라고 되어 있다.
    그러므로 GROUP BY 절에 HAVING을 추가해서 그 그룹 중 총거래금액이 70만원이상인 것만 출력하도록 해준다.
    GROUP BY B.USER_ID HAVING TOTAL_SALES>=700000

  5. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.
    (나는 이 단계를 빼먹고 채점 결과가 자꾸 틀렸다고 떠서 시간을 낭비했다. 꼭 정렬 조건을 확인하도록 하자)
    이제 조건에 만족하는 결과는 다 출력했다.
    마지막 조건인 정렬을 해준다.
    ORDER BY절을 통해 해줄 수 있다.
    ORDER BY TOTAL_SALES;

 

위 다섯 단계를 거치면서 하나하나씩 접근하면 매우 쉬운 문제이다!

조인, WHERE절, GROUP BY절, ORDER BY절이 다 쓰인 문제라서, 순서를 한번 정리하고 넘어가자

 

SELECT > FROM > JOIN-ON > WHERE > GROUP BY - HAVING > ORDER BY
반응형

+ Recent posts