알고리즘/프로그래머스
[MYSQL][lv.3] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기
Kangjieun11
2023. 10. 29. 16:50
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/164671
✅ 문제
✅ 해결
이 문제는
가장 조회수가 높은 게시물과 엮인, 파일들의 파일 경로를 출력하는 문제이다.
다음과 같은 순서로 쿼리문을 짜야한다.
1) 가장 조회수가 높은 게시글을 찾는다
2) BOARD와 FILE을 BOARD_ID 기준으로 JOIN해주고,
3) CONCAT을 이용해서 문자열을 연결해, 형식에 맞게 FILE_PATH를 만들어 준다.
⏺ CONCAT(문자열, 문자열 .... 문자열N)
: 문자열을 합쳐준다.
⏺ SUB QUERY
서브쿼리는 FROM절과 WHERE절에 사용될 수 있다.
서브쿼리로 임시테이블을 만들고, 그 테이블의 값을 이용해 새롭게 처리를 할 수 있다!!
나는 조회수(VIEWS)가 가장 많은 게시물을 찾기 위해 WHERE절에 서브쿼리를 사용했다.
✍️ 조회수가 가장 많은 게시물을 찾기
2가지 방법을 이용할 수 있다.
먼저 가장 큰 조회수의 값 자체를 찾아준다.
✔️ MAX()를 이용해 가장 큰 조회수 값 찾기
SELECT MAX(VIEWS)
FROM USED_GOODS_BOARD
✔️ ORDER BY와 LIMIT를 이용해 가장 큰 조회수 값 찾기
SELECT VIEWS
FROM USED_GOODS_BOARD
ORDER BY VIEWS DESC
LIMIT 1
당연히 MAX가 훨씬 간단하지만 공부하는 입장에선 여러가지 방법을 적용해보는게 좋으니까 둘다 적었다 ㅎㅎ
✅ 최종 정답 쿼리문
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
WHERE VIEWS = (SELECT MAX(VIEWS)
FROM USED_GOODS_BOARD)
ORDER BY F.FILE_ID DESC
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
WHERE VIEWS = (SELECT VIEWS
FROM USED_GOODS_BOARD
ORDER BY VIEWS DESC
LIMIT 1)
ORDER BY F.FILE_ID DESC