SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_조건에 맞는 사용자와 총 거래금액 조회하기

SQL공부 2024. 2. 22. 20:08
반응형

SELECT USER_ID, NICKNAME, sum(PRICE)TOTAL_SALES
FROM USED_GOODS_BOARD as b, USED_GOODS_USER as u
WHERE b.WRITER_ID = u.USER_ID
and STATUS = 'DONE'
group by 1
having TOTAL_SALES >= 700000
order by 3

문제

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

 

뭔가 자꾸 빠져서 ?가 뇌리에 박힌 문제. STATUS가 DONE인게 판매 완료된 상품인지 한번더 설명이 필요 했던거 같긴한데.. 물론 조금더 생각해보면 이해는 가는 부분이지만 해당컬럼이 뭔지 설명은 해줘야.. 맞는지 판단을 하고 풀것 같다. 

기본적으로 두 데이터를 조회 하는데 조인을 어떤것으로 할지 고민이 될것이다. 컬럼명이 같은 것이 없고 키컬럼이 무엇인지 설명이 없다.

이럴때는 키컬럼이 될만한 녀석이 무엇인가. 어떤게 각각 테이블에서 가르키는 내용이 같은가를 보고 골라준다.

테이블에서의 작성자 ID / 사용자 정보의 ID 어쨋거나 같은 사이트의 정보이기 때문에 다르게 쓰였지만 같은 ID 라는것을 추측할 수있다. (애매하면 select 컬럼명으로 둘다 추출해보면 된다) 

 

그렇게 조인을 해준 다음 팔린 상품을 조회 해야하니 STATUS의 'DONE' 조건을 걸어주고 해당 유저의 상품 총합을 알아야하니 group by를 꼭해준후 sum 함수로 계산 해주자. 그리고 이렇게 계산된 함수는 having 절에서 조건을 걸어야 된다. where 절에서는 select 문의 계산이 반영이 되지않는데. 프웨그 헤셀오 순서로 생각 하되 SELECT 계산 문은 '헤' 에서 된다고 이해하고 있다. (FROM , WHERE , GROUP BY ,HAVING ,SELECT, ORDER BY)

그렇게 조건 필터를 한번더 걸어주고 정렬 한 후 추출해 주면된다.

반응형