문제:
USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.
조건:
1)USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요.
2)첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요.
3)기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요.
4)조회수가 가장 높은 게시물은 하나만 존재합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/164671
이 문제 풀면서 JOIN을 쓰느라고 시간도 많이 쓰고 틀리기도 틀렸는데, 답은 JOIN을 쓰지 않고도 해결할 수 있었다.
used_goods_file 테이블은 파일경로를 만들고, 정렬하기 위해 쓴다.used_goods_board 테이블은 WHERE절에 조건으로 걸어주기 위해 쓴다. 정답풀이
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
SELECT CONCAT ('/home/grep/src/',a.board_id,'/',a.file_id,a.file_name,a.file_ext) AS FILE_PATH
FROM
(
SELECT b.board_id,
f.file_id,
f.file_name,
f.file_ext,
MAX(b.VIEWS) as max_view
FROM used_goods_board b JOIN used_goods_file f ON b.board_id=f.board_id
GROUP BY b.board_id,
f.file_id,
f.file_name,
f.file_ext
ORDER BY max_view desc
limit 1
) AS a
ORDER BY a.file_id desc
#오답풀이 2
SELECT CONCAT ('/home/grep/src/',f.board_id,'/',f.file_id,f.file_name,f.file_ext) AS FILE_PATH
FROM used_goods_board b JOIN used_goods_file f ON b.board_id=f.board_id
GROUP BY file_path
HAVING MAX(b.views)
ORDER BY f.file_id desc
limit 1;