본문 바로가기
SQL

본 캠프 8일차 SQL TIL

by Data 학습자 2024. 7. 1.

오늘 풀어본 문제

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

 

프로그래머스

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

programmers.co.kr

USED_GOODS_BOARD 와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총 금액이 70만원 이상인 사람의 회원 ID, 닉네임, 총 거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총 거래금액을 기준으로 오름차순 정렬해주세요.

 

순차적으로 문제에 접근해보기

 

우선적으로 두 테이블을 서로 묶어줘야 한다.

SELECT *
FROM USED_GOODS_BOARD INNER JOIN USED_GOODS_USER ON WRITER_ID = USER_ID

 

그 다음으로 해야할 것

WHERE에 거래가 완료된 내역만 보이게 하기

SELECT *
FROM USED_GOODS_BOARD INNER JOIN USED_GOODS_USER ON WRITER_ID = USER_ID
WHERE STATUS = 'DONE'

 

다음으론 유저 ID, 닉네임, 금액 순으로 나오게 SELECT 문 적기

SELECT USER_ID, NICKNAME, PRICE
FROM USED_GOODS_BOARD INNER JOIN USED_GOODS_USER ON WRITER_ID = USER_ID
WHERE STATUS = 'DONE'

 

USER_ID를 그룹화 한 다음 유저별로 거래한 총 금액을 계산하기

SELECT USER_ID, NICKNAME, SUM(PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD INNER JOIN USED_GOODS_USER ON WRITER_ID = USER_ID
WHERE STATUS = 'DONE'
GROUP BY USER_ID

 

총 거래 금액이 70만 이상인 내용만 추려내기

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

 

총 금액량을 순으로 나열되게 하기

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

 

오늘은 파이썬 공부를 하며 배워본 순차적으로 문제 해결을 시도해보기를 하였다.

오늘 풀어본 문제에선 HAVING 명령어를 처음 다뤄보게 되었으며 HAVING 에 대해 이해도가 올라가는 좋은 계기가 되었다.

 

HAVING을 사용하지 않는 방법도 있지 않을까 생각을 해보았는데 서브 쿼리를 작성하며 지금의 쿼리문보다 1.5배 정도 분량이 늘어나며 가독성이 안 좋아질 것 같다는 생각이 들어서 HAVING 이나 WHERE로 해결 할 수 있다면 서브쿼리는 최대한 사용하지 않는 편이 좋다고 생각이 들었다.

'SQL' 카테고리의 다른 글

본 캠프 10일차 SQL TIL  (0) 2024.07.06
본 캠프 9일차 SQL TIL  (0) 2024.07.02
본 캠프 7일차 SQL TIL  (0) 2024.06.30
본 캠프 6일차 SQL TIL  (0) 2024.06.29
본 캠프 5일차 SQL TIL  (0) 2024.06.28