관리 메뉴

JIE0025

[MYSQL][lv.3] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 본문

알고리즘/프로그래머스

[MYSQL][lv.3] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기

Kangjieun11 2023. 10. 29. 16:50
728x90

 

https://school.programmers.co.kr/learn/courses/30/lessons/164671

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


 

✅ 문제 

 

 

 

 

✅ 해결

 

이 문제는 

가장 조회수가 높은 게시물과  엮인,  파일들의 파일 경로를 출력하는 문제이다. 

 

 

다음과 같은 순서로 쿼리문을 짜야한다.

 

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