MYSQL/프로그래머스 LV03
조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기
수스리
2025. 3. 4. 23:22
https://school.programmers.co.kr/learn/courses/30/lessons/164671
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
WITH TEMP AS(
SELECT
BOARD_ID,
RANK() OVER(ORDER BY VIEWS DESC) AS ranking
FROM
USED_GOODS_BOARD
)
SELECT
CONCAT("/home/grep/src/", BOARD.BOARD_ID , '/',FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
FROM USED_GOODS_BOARD BOARD
JOIN USED_GOODS_FILE FILE ON BOARD.BOARD_ID = FILE.BOARD_ID
JOIN TEMP ON BOARD.BOARD_ID = TEMP.BOARD_ID
WHERE TEMP.ranking = 1
ORDER BY FILE_ID DESC
우선 이 코드에서는 막히는 부분이 있었다. 위 코드는 내가 수정한 부분이다. 아래는 내가 오답으로 제출한 코드이다.
WITH TEMP AS(
SELECT
BOARD_ID,
RANK() OVER(ORDER BY VIEWS DESC) AS ranking
FROM
USED_GOODS_BOARD
)
SELECT
CONCAT("/home/grep/src/", BOARD.BOARD_ID , '/',FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH, VIEWS
FROM USED_GOODS_BOARD BOARD
JOIN USED_GOODS_FILE FILE ON BOARD.BOARD_ID = FILE.BOARD_ID
JOIN TEMP ON BOARD.BOARD_ID = TEMP.BOARD_ID
WHERE TEMP.ranking = 1
ORDER BY FILE_ID DESC
LIMIT 1;
우선 LIMIT 1을 주목해주자. LIMIT1을 하면 조회수가 같은 행을 뽑을 때 문제가 발 생할 수 있다. 공동 1등이란 게 괜히 있는게 아니지 않는가?
다른 방식으로 서브쿼리로도 풀 수 있다
SELECT CONCAT("/home/grep/src/", BOARD.BOARD_ID , '/',FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
FROM USED_GOODS_BOARD BOARD
JOIN USED_GOODS_FILE FILE ON BOARD.BOARD_ID = FILE.BOARD_ID
WHERE VIEWS = (
SELECT
MAX(VIEWS)
FROM
USED_GOODS_BOARD
)
ORDER BY FILE_ID DESC;
매우 간단한 서브쿼리이긴 하다. 요즘에 서브쿼리로는 문제를 많이 못풀었는데 다음엔는 서브쿼리로도 문제를 한번 풀어봐야겠다.