«   2024/07   »
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
Recent Posts
Today
Total
관리 메뉴

짜리몽땅 매거진

[SQL] 프로그래머스 코딩테스트 연습1 본문

Data/SQL

[SQL] 프로그래머스 코딩테스트 연습1

쿡국 2024. 2. 5. 14:39

문제1. 조건에 부합하는 중고거래 댓글 조회하기

출처 : 프로그래머스 SQL 고득점 kit - SELECT

문제 정보 : LEVEL 1 / 정답률 61%

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

 

정답 쿼리

SELECT TITLE, B.BOARD_ID, REPLY_ID, B.WRITER_ID, B.CONTENTS, DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD AS A
JOIN USED_GOODS_BOARD AS B
ON A.BOARD_ID = B.BOARD_ID
WHERE A.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'
ORDER BY B.CREATED_DATE, TITLE

 

문제 해설

USED_GOODS_BOARD와 USED_GOODS_BOARD테이블을 조인하여 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 출력해야 함.

SELECT TITLE, B.BOARD_ID, REPLY_ID, B.WRITER_ID…….

 

1. 게시글 ID, 댓글 작성자 ID, 댓글 내용, 댓들 작성일 칼럼의 경우 두 테이블에 모두 속해있기 때문에 ex.B.BOARD_ID 처럼 테이블을 지정하지 않으면 칼럼명이 ambiguous(모호한)하다고 오류가 발생함.

 

DATE_FORMAT(B.CREATED_DATE, '%Y-%m-%d')

 

2. 날짜 포맷을 시간 표시를 제외한 YYYY-MM-DD형식으로 출력해야하는 조건이 있으므로 DATE_FORMAT 사용(mysql 기준)

 

FROM USED_GOODS_BOARD AS A JOIN USED_GOODS_BOARD AS B ON A.BOARD_ID = B.BOARD_ID

 

3. 게시글 ID가 두 테이블의 중복 칼럼이므로 BOARD_ID로 조인

WHERE A.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31'

 

4. 게시글 작성일이 2022년 10월에만 작성된 것만 출력해야 하므로 BETWEEN 사용

ORDER BY B.CREATED_DATE, TITLE

 

5. 댓글 작성일 기준 오름차순, 댓글 작성일이 동일할경우 게시글 제목을 오름차순으로 정렬(ASC 생략)


문제 2. 재구매가 일어난 상품과 회원 리스트 구하기

출처 : 프로그래머스 SQL 고득점 kit - GROUP BY

문제 정보 : LEVEL 2 / 정답률 85%

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

 

정답 쿼리

SELECT INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS TOTAL_ORDER
FROM FIRST_HALF AS A
JOIN ICECREAM_INFO AS B
ON A.FLAVOR = B.FLAVOR
GROUP BY INGREDIENT_TYPE
ORDER BY TOTAL_ORDER

 

문제 해설

 

아이스크림 상반기 주문 정보가 담긴 FIRST_HALF 와 아이스크림 성분정보가 담긴 ICECREAM_INFO 테이블을 조인 후 INGREDIENT_TYPE이 동일한 아이스크림들의 총 주문량 합을 오름차순으로 정렬해야 함.

SELECT INGREDIENT_TYPE, SUM(A.TOTAL_ORDER) AS TOTAL_ORDER

 

1. 아이스크림 주문 정보 테이블을 A라고 지정했을 때 재료 타입과 총 주문량을 출력

FROM FIRST_HALF AS A JOIN ICECREAM_INFO AS B ON A.FLAVOR = B.FLAVOR

 

2. 각 테이블에서 기본키와 외래키인 FLAVOR를 조인

GROUP BY INGREDIENT_TYPE

 

3. 재료 타입에 맞게 그룹핑

ORDER BY TOTAL_ORDER

 

4. 각 재료 타입의 총 주문량을 오름차순으로 정렬(ASC 생략)