SELECT CONCAT("/","home/grep/src","/",b.BOARD_ID,"/",FILE_ID,FILE_NAME, FILE_EXT)FILE_PATH
FROM USED_GOODS_BOARD as b, USED_GOODS_FILE as f
WHERE b.BOARD_ID = f.BOARD_ID
AND VIEWS = (SELECT MAX(VIEWS)
FROM USED_GOODS_BOARD)
order by FILE_ID desc
문제
USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력. 조회수가 가장 높은 게시물은 하나만 존재합니다.
문제 자체는 다 어렵지가 않은데 실제 시험에서는 정답을 바로 비교를 못하기 때문에 놓친게 있나 긴가민가 할 것 같아 걱정입니다. 실전에서는 써야할 구문들을 잊지말고 하나씩 체크하면서 써야 할 것 같습니다.
일단 먼저 조회수가 가장 높은 녀석을 찾아야합니다. 그러기 위해선 MAX를 쓰거나 정렬을 하여 limit 1을 하는 방법이 있습니다. 그래도 역시 근본인 MAX를 사용 하여 풀어줍니다. 조회수의 최대치는 BOARD 테이블의 VIEWS의 MAX을 보면 됩니다. 그리고 이값을 서브쿼리로 추출해서 메인 쿼리의 필터 조건으로 비교해 줍니다. 그러면 최대값이 일치하는 어떤 무언가(?)를 구할 수 있게됩니다. 그후 이 데이터로 첨부 파일과 연결 해야하므로 INNER JOIN을 통해 연결해 줍니다. (완벽히 서로 데이터가 상응하는 값을 구하는 경우에는 무조건 INNER JOIN을 사용 하면 된다 생각하시면 됩니다) 연결의 기준은 공통된 조건인 BOARD_ID로 연결해 줍니다. 그러면 게시물과 첨부파일간의 연결이 발생하는데 여기서 파일 경로를 보여줘야합니다. 이때는 연결되는 연결자가 각각 다르기에 CONCAT_WS를 사용 할 수없어 CONCAT 노가다로.. 하나하나 조건문에 맞게 파일 경로 컬럼들을 연결해 주어야 합니다... 없는 문자는 "" 안에 써서 적어주시면 됩니다.
그러면 서브쿼리조건 (조회수가 가장높은) 녀석이 필터링 된 녀석의 CONCAT 된 파일 경로명의 값이 출력됩니다. 그후 마지막으로 내림차순 desc 정렬을 하면 마무리가 됩니다..
풀면서 내림차순이랑 alias 하는걸 자꾸 까먹어서 조심해야겠습니다 ㅠ 문제는 다푸는데 자꾸 간단한걸 놓치네요 ㅎㅎ..
'SQL > MY SQL 문제 풀이(프로그래머스)' 카테고리의 다른 글
[MYSQL] PROGRAMMERS_대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.02.23 |
---|---|
[MYSQL] PROGRAMMERS_헤비 유저가 소유한 장소 (0) | 2024.02.23 |
[MYSQL] PROGRAMMERS_자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.02.23 |
[MYSQL] PROGRAMMERS_조건에 맞는 사용자 정보 조회하기 (0) | 2024.02.23 |
[MYSQL] PROGRAMMERS_없어진 기록 찾기 (0) | 2024.02.23 |