정답쿼리
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() 함수를 통해 합쳐주었다.
'코딩테스트 > SQL 코테' 카테고리의 다른 글
[solvesql] 할부는 몇개월로 해드릴까요 해설 (0) | 2024.07.07 |
---|---|
[프로그래머스 SQL] 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (1) | 2023.08.14 |
[프로그래머스 SQL] 오랜 기간 보호한 동물(2) (0) | 2023.08.07 |
[프로그래머스 SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.08.03 |
[프로그래머스 SQL] 자동차 평균 대여 기간 구하기 (1) | 2023.08.02 |
댓글