짜리몽땅 매거진
[SQL] 프로그래머스 코딩테스트 연습2 본문
문제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’로 인식되어 오답 처리 됨.
'Data > SQL' 카테고리의 다른 글
[SQL] Leetcode/HackerRank 코딩테스트 연습 1 (0) | 2024.03.04 |
---|---|
[SQL] 프로그래머스 코딩테스트 연습3 (1) | 2024.02.27 |
[SQL] 프로그래머스 코딩테스트 연습1 (1) | 2024.02.05 |
[SQL] LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN, INNER JOIN (0) | 2023.08.21 |
[SQL] IF, CASE, 함수 만들기 (0) | 2023.08.16 |