일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- power-bi
- pyinstaller
- SQL
- 데이터분석솔루션
- leetcode
- 물만날물고기
- 파이썬
- 리스트
- sklearn
- 물 만날 물고기
- 코랩
- Revising the Select Query II
- MYSQL
- 텐서플로우
- 태블로
- 판다스
- 코딩테스트
- 나임
- DB
- Tableau
- KNIME 데이터 분석
- colab
- python
- 데이터프레임
- 프로그래머스
- HackerRank
- 해커랭크
- pandas
- sorted()
- KNIME
- Today
- Total
물 만날 물고기
[프로그래머스/SQL] - (5) 조건에 맞는 사용자와 총 거래금액 조회하기 본문
🔍 예상 검색어
# 조건에 맞는 사용자와 총 거래금액 조회하기
# SQL
# MYSQL
# 프로그래머스
해당 포스팅은 프로그래머스 SQL "조건에 맞는 사용자와 총 거래금액 조회하기" 문제 풀이에 대하여 정리하였습니다.
▶ 문제
코딩테스트 연습 - 조건에 맞는 사용자와 총 거래금액 조회하기 | 프로그래머스 스쿨
▶ 내 정답
-- 코드를 입력하세요
-- USED_GOODS_BOARD AS B
-- BOARD_ID, *WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS
-- 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수
-- USED_GOODS_USER AS U
-- *USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO
-- 회원 ID, 닉네임, 시, 도로명 주소, 상세 주소, 전화번호
-- 문제 조건
-- (1) 완료된 중고 거래의 총금액이 70만 원 이상 (GROUP BY)
-- (2) 총거래금액을 기준으로 오름차순 정렬
-- 결과테이블
-- U.USER_ID, U.NICKNAME, TOTAL_SALES(NEW+)
WITH
TEMP_01 AS
(
SELECT B.WRITER_ID, B.STATUS, SUM(B.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD AS B
WHERE STATUS = 'DONE'
GROUP BY WRITER_ID
)
SELECT U.USER_ID, U.NICKNAME, T.TOTAL_SALES
FROM USED_GOODS_USER AS U
LEFT JOIN TEMP_01 AS T
ON U.USER_ID = T.WRITER_ID
WHERE T.TOTAL_SALES >= 700000
ORDER BY TOTAL_SALES ASC;
▶ 풀이설명
(1) 먼저 중고거래 STATUS 중 완료 된 값들로 필터링 먼저 진행하였고, GROUP BY 를 통해 TOTAL_SALES를 집계함
(2) (1)번 결과 테이블을 임시테이블로 지정 하였고, USED_GOODS_USER 테이블과 (1) 테이블을 JOIN 하였음
(3) WHERE 절을 이용해서 총 금액이 700,000이상인 조건으로 필터링하고 ORDER BY 절을 이용한 정렬 실시함
▶ 다른 분들 정답 (1)
SELECT U.user_id, U.nickname, SUM(B.price) AS TOTAL_SALES
FROM used_goods_user U
JOIN used_goods_board B ON U.user_id = B.writer_id
WHERE B.status = 'done'
GROUP BY U.user_id, U.nickname
HAVING TOTAL_SALES >= 700000
ORDER BY TOTAL_SALES ASC;
▶ 다른 분들 정답 (2)
-- 코드를 입력하세요
SELECT USER_ID, NICKNAME, SUM(PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD, USED_GOODS_USER
WHERE WRITER_ID = USER_ID AND STATUS = "DONE"
GROUP BY USER_ID
HAVING SUM(PRICE) >= 700000
ORDER BY TOTAL_SALES ASC
▶ 다른 분들 정답 (3)
-- WHERE 이용
SELECT USER_ID, NICKNAME, TOTAL_PRICE
FROM USED_GOODS_USER, (SELECT WRITER_ID, SUM(PRICE) AS TOTAL_PRICE
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID,STATUS
HAVING STATUS = 'DONE'
AND SUM(PRICE) >= 700000) B
WHERE B.WRITER_ID = USER_ID
ORDER BY TOTAL_PRICE;
-- JOIN 이용
SELECT USER_ID, NICKNAME, TOTAL_PRICE
FROM USED_GOODS_USER
JOIN (SELECT WRITER_ID, SUM(PRICE) AS TOTAL_PRICE
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID,STATUS
HAVING STATUS = 'DONE'
AND SUM(PRICE) >= 700000) B
ON B.WRITER_ID = USER_ID
ORDER BY TOTAL_PRICE;
▶ 총평
본인은 실수하지 않고, 최대한 결과나 나오는 방향으로 진행하기 위하여,
WITH 절을 이용해 임시 테이블을 선언하고, 이를 JOIN 하는 과정에서 WHERE 조건절을 사용하여 결과를 출력하였는데,
다른 분들의 결과를 확인해보니 GROUP BY 절과 HAVING 조건절을 이용하는 방법이 문제 취지에는 더 맞는 것 같다는 생각이 들었다.
개인적으로 파이썬으로 코딩하는 습관 때문인지, 그때 그때 변수를 선언하면서 데이터를 핸들링 하는 것을 더 선호하는데 FROM 절에 SELECT로 테이블을 다시 만들어서 사용하는게, 실무자들 입장에서 가독성이 더 좋은지 아닌지를 잘 모르겠다. 실제 실무용 코드 작성은 어떤 방식을 선호하는지, 어떤 방식이 효율적인지를 확인해보도록 해야겠다.
▼ 참고자료
No. | 내용 | 비고 |
1 | my sql 쉬운답 | 프로그래머스 스쿨 | haaaneeulll@gmail.com2023.6.4 01:28 |
2 | 프로그래머스 조건에 맞는 사용자와 총 거래 금액 조회하기 SQL(MySQL) | 끄적끄적 |
3 | mysql 정답 | 프로그래머스 스쿨 | habibi2023.4.22 15:43 |
'DB & SQL > 프로그래머스' 카테고리의 다른 글
[프로그래머스/SQL] - (16) 저자 별 카테고리 별 매출액 집계하기 GROUP BY (0) | 2023.06.25 |
---|---|
[프로그래머스/SQL] - (13) 자동차 대여 기록에서 장기/단기 대여 구분하기 (0) | 2023.06.24 |
[프로그래머스/SQL] - (76) 모든 레코드 조회하기 (0) | 2023.06.23 |
[프로그래머스/SQL] - (40) 3월에 태어난 여성 회원 목록 출력하기 (0) | 2023.06.23 |
[프로그래머스/SQL] - (6) 특정 옵션이 포함된 자동차 리스트 구하기 (0) | 2023.06.23 |