CODEKATA

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

임빵빵 2024. 7. 25. 10:19

<문제>

USED_GOODS_BOARD와 USED_GOODS_FILE 테이블에서 조회수가 가장 높은 중고거래 게시물에 대한 첨부파일 경로를 조회하는 SQL문을 작성해주세요. 첨부파일 경로는 FILE ID를 기준으로 내림차순 정렬해주세요. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력해주세요. 조회수가 가장 높은 게시물은 하나만 존재합니다.

 

<나의 풀이>

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

 

1. 기본적인 파일경로는 /home/grep/src/ 이며, 게시글 ID를 기준으로 디렉토리가 구분되고, 파일이름은 파일 ID, 파일 이름, 파일 확장자로 구성되도록 출력되어야 하기 때문에 concat() 을 이용하여 문자열 합쳐주기

--> concat('/home/grep/src/', b.board_id, '/', b.file_id, b.file_name, b.file_ext) 'file_path'

 

2. 두 개의 테이블을 각 board_id로 inner join 으로 결합해주기

--> from used_goods_board a inner join used_goods_file b on a.board_id=b.board_id

 

3. 조회수가 가장 높은 중고거래 게실물을 찾아야 하기 때문에 스칼라 서브쿼리 사용

(서브쿼리가 하나의 값을 반환하는 경우, 이를 WHERE 절의 필터링 값으로 사용할 수 있으며 이를 스칼라 서브쿼리 라고 부른다.)

-->where a.views = (select max(views) from used_goods_board)

 

4. 파일 아이디를 기준으로 내림차순이기 때문에

-->order by b.file_id desc


concat() - 여러 문자열를 하나의 문자열로 합치기

SELECT CONCAT('안녕하세요.', '감사해요.', '잘있어요.', '다시만나요.')
출처: https://extbrain.tistory.com/52 [확장형 뇌 저장소:티스토리]

# 안녕하세요.감사해요.잘있어요.다시만나요.