반응형
#문제 요약
- 조회수가 가장 높은 게시물의 첨부 파일 경로를 조회할 것
- 조회수가 가장 높은 게시물은 하나임을 보장
- 파일 경로 : /home/grep/src/게시글 ID/파일 ID_파일명.파일확장자
#MYSQL
SELECT CONCAT('/home/grep/src/', B.BOARD_ID, '/', F.FILE_ID, F.file_name, F.file_ext) AS FILE_PATH
FROM (SELECT * FROM USED_GOODS_BOARD ORDER BY VIEWS DESC LIMIT 1) B LEFT OUTER JOIN USED_GOODS_FILE F ON B.BOARD_ID = F.BOARD_ID
ORDER BY F.FILE_ID DESC
#ORACLE
- 오라클에서 String을 합치는 방법은 [CONCAT, ||] 2가지가 있음
- 실무에서는 ||을 더 많이 씀
-- || VER (실무에서는 이걸 더 사용함)
SELECT ('/home/grep/src/' || B.BOARD_ID || '/' || F.FILE_ID || F.file_name || F.file_ext) AS FILE_PATH
FROM USED_GOODS_BOARD B LEFT OUTER JOIN USED_GOODS_FILE F ON B.BOARD_ID = F.BOARD_ID
WHERE B.BOARD_ID = (
SELECT B.board_id
FROM (
SELECT *
FROM USED_GOODS_BOARD
ORDER BY views DESC
) B
WHERE ROWNUM=1
)
ORDER BY F.FILE_ID DESC
-- CONCAT VER
SELECT CONCAT('/home/grep/src/', CONCAT(B.BOARD_ID, CONCAT('/', CONCAT(F.FILE_ID, CONCAT(F.file_name, F.file_ext))))) AS FILE_PATH
FROM USED_GOODS_BOARD B LEFT OUTER JOIN USED_GOODS_FILE F ON B.BOARD_ID = F.BOARD_ID
WHERE B.BOARD_ID = (
SELECT B.board_id
FROM (
SELECT *
FROM USED_GOODS_BOARD
ORDER BY views DESC
) B
WHERE ROWNUM=1
)
ORDER BY F.FILE_ID DESC
#새롭게 알게 된 점
1) CONCAT
- MYSQL에서는 한 번에 여러 문자열(2~254개)을 CONCAT 명령어로 묶을 수 있음
- 오라클에서는 CONCAT으로 2개의 문자열을 최대로 묶을 수 있
- MYSQL에는 GROUP_CONCAT이라고 하여 한 컬럼의 데이터를 모두 묶어주는 명령어가 있음
2) ||
- 오라클에서는 ||(연결 연산자)로 여러 문자열을 묶을 수 있음 -> 논리연산자는 OR로
- 그래서 CONCAT을 쓰는 것보다 가시적임 -> 현업에서 많이 씀
- MYSQL에서 ||은 논리연산자임 (문자열을 묶는 용도가 아님)
3) 결과(ROW) 수 제어
- LIMIT 명령어는 MYSQL에만 있음
- 오라클에는 WHERE 절에 쓸 수 있는 ROWNUM으로 제어한다.
- 다른 점은 LIMIT은 가장 마지막에 실행되는 명령어이다.
- 하지만 ROWNUM은 WHERE절에 있기 때문에 ORDER BY보다는 먼저 실행되는 등의 순서 문제가 있음 -> FROM 서브 쿼리(인라인뷰)로 완성형 테이블을 미리 만들어야 함
이거 완전
산하는 코딩중이 아니라
산하는 월루중인데...
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 조건에 부합하는 중고거래 상태 조회하기 [#SQL] (0) | 2024.10.07 |
---|---|
[SELECT] SQL 고득점 키트 문제 풀이 모음 (3) | 2024.05.11 |
[프로그래머스] 상품을 구매한 회원 비율 구하기 [#SQL] (1) | 2024.03.11 |
[프로그래머스] lv2. 땅따먹기 [#DP] (0) | 2024.03.08 |
[프로그래머스] FrontEnd 개발자 찾기 [#SQL] (0) | 2024.03.07 |