코딩테스트/SQL

[MySQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

rlatotquf45 2024. 10. 12. 14:57
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/164671

문제 요약

USED_GOODS_BOARD와 USED_GOODS_FILE 두 개의 테이블에서 조회수가 가장 높은 중고 거래 게시물의 첨부파일 경로를 조회하는 문제입니다. 파일 경로는 /home/grep/src/로 시작하며, 게시글 ID로 디렉토리를 구분하고, 파일 이름은 파일 ID + 파일 이름 + 파일 확장자로 구성됩니다. 첨부파일 경로는 파일 ID를 기준으로 내림차순 정렬해야 합니다.

풀이 방법

 

  • 조회수가 가장 높은 게시물을 조회하기 위해 USED_GOODS_BOARD 테이블에서 views를 기준으로 내림차순 정렬한 후, 상위 1개의 게시글을 선택합니다.
  • 선택된 게시글의 BOARD_ID를 기준으로 USED_GOODS_FILE 테이블에서 해당 게시글의 첨부파일을 조회합니다.
  • 각 파일의 경로를 /home/grep/src/{BOARD_ID}/{FILE_ID}{FILE_NAME}{FILE_EXT} 형식으로 만들어 출력합니다.
  • 결과는 FILE_ID를 기준으로 내림차순으로 정렬하여 출력합니다.

 

정답 코드

SELECT concat('/home/grep/src/', f.board_id, '/', f.file_id, f.file_name, f.file_ext) as FILE_PATH
FROM used_goods_file as f
JOIN (
    SELECT board_id 
    FROM used_goods_board
    ORDER BY views DESC 
    LIMIT 1
) as b
ON f.board_id = b.board_id
ORDER BY f.file_id DESC;

새롭게 배운 내용

  • 처음에 짜고 실패한 쿼리이전 코드에서 변경한 부분
    1. GROUP BY 제거: 이전에는 GROUP BY board_id로 각 게시글마다 최대 조회수를 구하는 방식이었지만, 문제의 요구사항은 "조회수가 가장 높은 게시물 하나"였기 때문에 GROUP BY가 불필요했습니다. 이를 제거하고, ORDER BY views DESC LIMIT 1로 조회수가 가장 높은 게시글 하나만 선택하도록 수정했습니다.
    2. 파일 경로 구성: CONCAT 함수에서 파일 이름 경로를 구성할 때, 파일 이름(file_name)도 포함하도록 수정했습니다. 이전에는 file_id와 file_ext만 사용했으나, 문제에서 요구한 형식은 file_id + file_name + file_ext이므로 이를 반영했습니다.
    3. 파일 ID 내림차순 정렬: ORDER BY file_id DESC를 추가하여 파일 ID를 기준으로 내림차순으로 정렬되도록 하였습니다.
728x90
반응형