https://school.programmers.co.kr/learn/courses/30/lessons/164671
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.
오답 코드
SELECT
concat('/home/grep/src/' , f.board_id, '/', file_id, file_name, file_ext) as FILE_PATH
from USED_GOODS_BOARD b
join USED_GOODS_FILE f
on b.board_id = f.board_id
order by views desc , file_id desc
limit 2
게시글 당 첨부파일이 2개만 있다고 생각하여 위와 같이 쿼리를 짰는데, 모든 데이터를 조회해보니 게시글 당 파일이 3개가 있거나 2개가 있거나 하는 경우가 다양했다.
정답 코드
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
order by views desc
limit 1)
order by file_id desc
- 서브 쿼리를 통해서 조회수가 가장 높은 1개 게시글을 가져옵니다.
- concat을 통해서 file_path를 생성합니다.
- file_id를 기준으로 내림차순을 해줍니다.
항상 두개의 테이블을 보면 조인을 하고 난 다음에 코드를 짰는데, 위 문제에서 요구하는 것은 처음에 조회수가 가장 높은 게시글을 찾는다 그것 하나 뿐이다!
그렇기 때문에 굳이 join을 할 필요 없이 서브 쿼리를 통하여 조회수가 가장 높은 게시글을 가져오면 되는 문제였다. 서브 쿼리에 대한 이해도가 아직 많이 부족한것 같아서 연습이 필요하다
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 지게차와 크레인 (0) | 2025.02.25 |
---|---|
자동차 평균 대여 기간 구하기 (1) | 2024.12.29 |
즐겨찾기가 가장 많은 식당 정보 출력하기 (3) | 2024.12.26 |
SQL (1) | 2024.12.23 |
[프로그래머스] Lv.3 징검다리 건너기 (1) | 2024.09.26 |