
SQL 공부중 입니다. ✍✍✍
문제
https://school.programmers.co.kr/learn/courses/30/lessons/164671
풀이
SELECT CONCAT('/home/grep/src/',B.BOARD_ID,'/',B.FILE_ID,B.FILE_NAME, B.FILE_EXT) "FILE_PATH"
FROM USED_GOODS_BOARD A
INNER JOIN USED_GOODS_FILE B
ON A.BOARD_ID = B.BOARD_ID
WHERE A.VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)
ORDER BY B.FILE_ID DESC;
BOARD_ID로 JOIN 할 수 있는 두 테이블 USED_GOODS_BOARD, USED_GOODS_FILE 에서 USED_GOODS_BOARD의 가장 큰 VIEWS의 BOARD_ID를 구하고 이에 관한 USED_GOODS_FILE B.BOARD_ID,B.FILE_ID,B.FILE_NAME, B.FILE_EXT 정보를 출력하는 문제였습니다.🐏🐏🐏
다른 테이블에 조건을 설정하기 위해 WHERE + 서브쿼리 형태의 구문을 작성하고 문제에서 원하는 형식의 데이터로 변환해주기 위해 CONCAT()함수로 묶어주었습니다.🐓🐓🐓
저의 풀이 이외에 아래와 같이
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 (SELECT *, RANK() OVER(ORDER BY VIEWS DESC) R
FROM USED_GOODS_BOARD
) a
WHERE a.R = 1
)
ORDER BY FILE_ID DESC
RANK() OVER 구문으로 정렬된 순위를 구하고 R = 1 인 테이블을 구하는 서브쿼리로 해결한 풀이도 볼 수 있었습니다.
감사합니다.🐋🐋🐋