«   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] 프로그래머스 코딩테스트 연습2 본문

Data/SQL

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

쿡국 2024. 2. 19. 23:57

문제1. 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

출처 : 프로그래머스 SQL 고득점 kit - String, Date

문제 정보 : LEVEL 3 / 정답률 72%

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

 

정답 쿼리

SELECT concat("/home/grep/src/",BOARD_ID,"/",FILE_ID,FILE_NAME,FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE
WHERE BOARD_ID = (
SELECT BOARD_ID
FROM USED_GOODS_BOARD
GROUP BY BOARD_ID
ORDER BY VIEWS DESC
LIMIT 1 )
ORDER BY FILE_ID DESC

 

문제 해설

 

1. 주요 포인트 1 - concat 활용

SELECT CONCAT("/home/grep/src/",BOARD_ID,"/",FILE_ID,FILE_NAME,FILE_EXT) AS FILE_PATH

 

concat 함수를 이용해 각 열의 값들을 합쳐주기 (concat 말고 ‘+’로 합쳐볼까 했지만, 오류가 남.)

 

2. 주요 포인트 2 - where절 서브쿼리

WHERE BOARD_ID = (SELECT BOARD_ID
FROM USED_GOODS_BOARD
GROUP BY BOARD_ID
ORDER BY VIEWS DESC
LIMIT 1 )

 


문제 2. 오프라인/온라인 판매 데이터 통합하기

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

문제 정보 : LEVEL 4 / 정답률 62%

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

 

정답 쿼리

select date_format(sales_date,'%Y-%m-%d') as sales_date, product_id, user_id, sales_amount
from online_sale
where sales_date like '2022-03%'
union
select date_format(sales_date,'%Y-%m-%d') as sales_date, product_id, null as user_id, sales_amount
from offline_sale
where sales_date like '2022-03%'
order by sales_date, product_id, user_id

 

문제 해설

 

1. 주요 포인트 1 - union 활용

select date_format(sales_date,'%Y-%m-%d') as sales_date, product_id, user_id, sales_amount
from online_sale
where sales_date like '2022-03%'
union
select date_format(sales_date,'%Y-%m-%d') as sales_date, product_id, null as user_id, sales_amount
from offline_sale
where sales_date like '2022-03%'

 

union - 중복 값 제외하고 합치기

union all - 중복 값 포함해서 합치기

 

2. null as user_id

 

주의 : ‘null’ as user_id로 입력할 경우 문자열 ‘null’로 인식되어 오답 처리 됨.