프로그래머스 SQL - 66번 CONCAT, WHERE절을 이용한 서브쿼리(SUBQUERY)

yeyeyeyeye·2025년 3월 12일

문제:
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;

profile
안녕하세요? 데이터분석가 되고 싶어요.

0개의 댓글