[52] 부트캠프 TIL - 본캠프 34일차

2024. 10. 10. 16:28부트캠프 TIL

728x90

1. 프로그래머스 이용한 sql과 알고리즘 문제 해결

1-1)  sql 문제 : 조건에 맞는 사용자와 총 거래금액 조회하기

ㄴ 문제 : 중고 거래 게시판 테이블과 중고 거래 회원 테이블에서 완료된 중고 거래의 총 금액이 70만원 이상이 회원의 아이디, 닉네임,  총거래금액을 조회하는 sql문을 작성해주세요. 총거래금액을 기준으로 오름차순 정렬해주세요.

 

ㄴ 설명_1 : 조회할 컬럼 체크 - (아이디, 닉네임, 총거래금액)

ㄴ 설명_2 : 완료된 중고거래 (WHERE 활용)

ㄴ 설명_3 : 총금액 70만원이상 ( WHERE 활용)

ㄴ 설명_4 : 오름차순 정렬 (ORDER BY 활용)

ㄴ 실제 쿼리 :

SELECT
    USER_ID,
    NICKNAME,
    TOTAL_SALES
FROM
(SELECT b.USER_ID, b.NICKNAME, SUM(a.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD a LEFT JOIN USED_GOODS_USER b ON a.WRITER_ID = b.USER_ID
WHERE STATUS = 'DONE'
GROUP BY b.USER_ID
) c
WHERE TOTAL_SALES >= 700000
ORDER BY 3 ASC

※ 오랜만에 꽤 난이도가 있는 문제가 나왔다. 조인문을 활용하고 중간중간에 필요한 것들이 많은 문제였다.

- 먼저 () c 괄호안에 있는 쿼리부터 작성을 해야한다. 양쪽 테이블에서 참조할 컬럼은 회원아이디로 각 각 WRITER_ID, USER_ID 이다. 두 컬럼으로 조인을 진행한다.

- 이때 가격(PRICE)을 SUM() 합계를 구하고 예시출력결과처럼 TOTAL_SALES로 이름을 지정해준다.

- 판매가 완료된 (STATUS = 'DONE')의 조건을 추가한다.

- 아이디 기준으로 GROUP BY를 해주지 않으면 전체 데이터가 합쳐지기 때문에 GROUP BY를 해줘야한다.

※ STATUS와 각 회원별로 금액을 구분해야하는 위의 두 줄 작업을 계속 제외하고 생각해서 평소보다 문제풀이가 좀 걸렸었다. 문제를 더 꼼꼼히 읽고 필요한 조건을 잘 체크해야할거같다.

- 중간에 4줄을 완성하고 () c로 감싸고 위에서 조회할 컬럼들을 적어준다.(USER_ID, NICKNAME, TOTAL_SALES)

- TOTAL_SALES는 존재하지 않는 컬럼이기 때문에 이렇게 쿼리를 감싸고 상단에 넣어주면 조건문으로 활용할 수 있다.

- 총 금액 70만원이상의 조건을 걸어야하기 때문에 필요하다. 괄호 밖에서 70만원이상의 조건을 걸어준다.

- 마지막으로 총 결과를 총금액 기준으로 오름차순 정렬해준다.

 

1-2) 알고리즘 문제 : 삼총사

ㄴ 배열안에 정수 3개를 더했을때 0이되는 경우를 삼총사로 칭하고, 그 개수를 구해야한다.

ㄴ 모든 경우의 수를 체크해야하고 0이 되었을때 카운트를 올린다라는 개념을 생각하고 진행했다.

728x90