728x90
반응형

안녕하세요!

오늘은 프로그래머스 SQL 고득점 Kit  중 GROUP BY 분야의 '조건에 맞는 사용자와 총 거래금액 조회하기' 문제 리뷰를 진행하겠습니다.

 

문제는 아래 링크에서 확인해주시면 됩니다.

https://school.programmers.co.kr/learn/courses/30/lessons/164668

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

  • 문제설명

  • 문제

  • 예시

 

  • 문제를 파악하여 쿼리 생각하기

예시에서 볼 수 있듯이, 저희가 문제에서 SELECT 해야하는 부분은 회원의

  1. ID: B.USER_ID
  2. 닉네임: B.NICKNAME
    → A는 USES_GOODS_BOARD 테이블, B는 USED_GOODS_USER 테이블을 뜻하는데, 컬럼 이름이 고유할 경우 소속 테이블을 명시해주지 않아도 SQL에서 구분이 가능합니다.
  3. 총 거래금액: SUM(A.PRICE) TOTAL_SALES
    → 거래금액만 존재하고, 총 거래금액은 존재하지 않기 때문에 총 거래금액은 거래금액을 합친 거라고 생각할 수 있습니다.
    → TOTAL_SALES는 총 거래금액의 컬럼을 별칭으로 지정한 것 입니다.

총 3개인 것을 확인할 수 있습니다.

 

다음으로 두 개의 테이블을 JOIN 해야하는 부분은

  1. USES_GOODS_BOARD 테이블과 USED_GOODS_USER 테이블을 동시에 만족: JOIN USED_GOODS_USER B
    → 두 테이블을 동시에 만족해야 하기 때문에 내부 조인을 사용하는데, JOIN 혹은 INNER JOIN 어떤 걸 사용하셔도 상관없습니다.
  2. 두 테이블에서 값이 동일한 컬럼이 기준: ON A.WRITER_ID = B.USER_ID
    → ON은 조인의 조건으로 두 테이블에서 값이 동일한 것은 회원 ID 밖에 없기 때문에 해당 부분으로 조인을 진행합니다.

위와 같은 것을 확인할 수 있습니다.

 

다음으로 저희가 WHERE 조건으로 확인해야 하는 부분은

  1. 완료된 중고 거래: A.STATUS = 'DONE'
    → 여기서 주의해야할 점은 총 금액이 70만원 이상인 조건은 총 금액의 조건이고, 테이블 자체에서는 총 금액이라는 컬럼이 없기 때문에 WHERE 조건에서는 사용할 수 없습니다.

총 1개인 것을 확인할 수 있습니다.

 

다음으로 저희가 GROUP BY 해야하는 부분은

  1. 총 거래금액을 제외한 나머지 부분: B.USER_ID, B.NICKNAME
    USER_ID 혹은 NICKNAME 각각으로 GROUP BY를 해도 두 개의 값이 모두 중복 값이 없기 때문에 동일한 결과물을 가지지만, 항상 그룹화하고 싶은 컬럼을 제외한 모든 컬럼으로 그룹화하는 것이 좋습니다.
  2. 총 금액이 70만원 이상: HAVING TOTAL_SALES >= 700000
    → HAVING은 GROUP BY의 조건으로 그룹화를 통해 생성된 컬럼에 조건을 걸 수 있습니다.

위와 같은 것을 확인할 수 있습니다.

 

마지막으로 저희가 문제에서 확인해야 하는 부분은

  1. 결과는 총 거래금액을 기준으로 오름차순 정렬: ORDER BY TOTAL_SALES

총 1개인 것을 확인할 수 있습니다.

 

쿼리 완성하기

이제 위에서 생각한 쿼리를 SQL 실행순서에 맞게 배치해주시면 됩니다.

그렇게 완성된 쿼리는 아래와 같습니다.

SELECT 
    B.USER_ID, 
    B.NICKNAME, 
    SUM(A.PRICE) TOTAL_SALES
FROM
    USED_GOODS_BOARD A
JOIN
    USED_GOODS_USER B ON A.WRITER_ID = B.USER_ID
WHERE
    A.STATUS = 'DONE'
GROUP BY 
    B.USER_ID, B.NICKNAME HAVING TOTAL_SALES >= 700000
ORDER BY 
    TOTAL_SALES

 

궁금한 부분이 있으신 분들은 댓글로 남겨주시면, 답변 드리도록 하겠습니다.

 

★읽어주셔서 감사합니다★

728x90
반응형

+ Recent posts