USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.
문제링크
조건정리
/home/grep/scr/board_id/
+ file_id
+ file_name
+ file_ext
풀이
RANK
로 게시물 rank 구하고 concat
WITH rnk_board AS
(
SELECT board_id, RANK() OVER (ORDER BY views DESC) AS rnk
FROM used_goods_board
)
SELECT CONCAT('/home/grep/src/', b.board_id,
'/',f.file_id,f.file_name,f.file_ext) AS FILE_PATH
FROM rnk_board b
INNER JOIN used_goods_file f
ON b.board_id = f.board_id
WHERE b.rnk = 1
ORDER BY file_id DESC
다른 방식으로 풀기
나는 이런 WHERE에서 서브쿼리 열어주는 방식을 좀 어려워하는 것 같다 ㅠ CTE 써서 그냥 단계별로 푸는게 더 좋은 것 같은데 뭐가 더 좋은 방식인지는 아직 잘 모르겠다
SELECT CONCAT('/home/grep/src/', b.board_id,
'/',f.file_id,f.file_name,f.file_ext) AS FILE_PATH
FROM used_goods_board b
INNER JOIN used_goods_file f ON b.board_id = f.board_id
WHERE b.board_id = (
SELECT board_id
FROM used_goods_board
ORDER BY views DESC
LIMIT 1
)
ORDER BY file_id DESC