[프로그래머스] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

yannie·2024년 10월 11일
0

[문제]

USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.

[내가 푼 풀이(오답)]

SELECT
    CONCAT("/home/grep/src/", F.FILE_ID, F.FILE_NAME, F.FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE F
INNER JOIN USED_GOODS_BOARD B
ON F.BOARD_ID = B.BOARD_ID IN (SELECT B.BOARD_ID, MAX(VIEWS)
                               FROM USED_GOODS_BOARD
                               ORDER BY VIEWS DESC) -- 조회수가 가장 높은 게시물 BOARD_ID
ORDER BY F.FILE_ID DESC
LIMIT 1
;

SQL 실행 중 오류가 발생하였습니다.
Operand should contain 1 column(s)

[내가 푼 풀이(정답)]

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 -- 조회수가 가장 높은 BOARD_ID
                  FROM USED_GOODS_BOARD
                  ORDER BY VIEWS DESC
                  LIMIT 1)
ORDER BY FILE_ID DESC
;

[코드리뷰]

  • 오답의 이유 :
    1. 서브쿼리에는 앞에 작성한 컬럼들을 그대로 적어야 한다. -> 오류 발생
    2. '게시글 ID를 기준으로 디렉토리 구분'을 놓침
  • WHERE절을 통해 조회수가 가장 높은 BOARD_ID 필터링
		WHERE BOARD_ID = (SELECT BOARD_ID FROM USED_GOODS_BOARD
        ORDER BY VIEWS DESC
        LIMIT 1)
  • BOARD_ID를 기준으로 디렉토리가 구분되기 때문에 첨부파일 경로의 기본 파일 경로 뒤에 추가되어야 한다.

기억해!

  • 출력문에 JOIN되는 테이블의 컬럼명이 반드시 포함되어야 하는 경우가 아니라면 => JOIN을 사용하지 않고 WHERE절을 통해 원하는 조건을 바탕으로 필터링이 가능하다.

0개의 댓글