본문 바로가기
코딩테스트/SQL 코테

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

by 코듀킹 2023. 8. 8.

정답쿼리

SELECT CONCAT('/HOME/GREP/SRC/', F.BOARD_ID, '/',FILE_ID, FILE_NAME, FILE_EXT) AS FILE_PATH
FROM USED_GOODS_FILE F
JOIN USED_GOODS_BOARD B
ON F.BOARD_ID = B.BOARD_ID
WHERE VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)
ORDER BY F.FILE_ID DESC;

 

해설

이번 문제는 ORDER BY VIEWS \ LIMIT 1; 이렇게 작성하면 안 되나? 헷갈렸던 문제였다. 

 

SELECT MAX(VIEWS) FROM USED_GOODS_BOARD

 

쿼리를 이렇게 작성하면, 조회수가 가장 높은 VIEWS 값 하나만 추출하게 된다. 이를 WHERE 절을 통해 조건을 걸어주면, 조회수가 가장 높은 VIEWS값 하나만 필터링하게 된다.

 

ORDER BY VIEWS 
LIMIT 1;

 

위 문장과의 차이는 데이터를 여러개 추출하느냐 딱 1개만 추출하느냐의 차이다. WHERE절을 통해 VIEWS의 MAX값만 필터링해 주면, MAX값이 만약 동일한 값이 3개라면, 3개의 데이터를 모두 추출할 수 있지만, ORDER BY로 정렬하고, LIMIT 1로 잘라버리면, 딱 1개의 데이터밖에 추출하지 못한다.

 

이렇게 데이터를 추출하고 나서 ORDER BY를 통해 마지막으로 FILE_ID 기준으로 정렬해주면 끝난다. SELECT문에서 문자열은 CONCATE() 함수를 통해 합쳐주었다. 

댓글