🔸1. 즐겨찾기가 가장 많은 식당 정보 출력하기
https://school.programmers.co.kr/learn/courses/30/lessons/131123?language=oracle
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM (
SELECT
FOOD_TYPE,
REST_ID,
REST_NAME,
FAVORITES,
ROW_NUMBER() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS RN
FROM REST_INFO
) T
WHERE RN = 1 #각 음식 종류 그룹에서 즐겨찾기 1위만 남기기
ORDER BY FOOD_TYPE DESC;
- 오라클에서는 (FOOD_TYPE, REST_ID) IN (서브쿼리)처럼 다중 컬럼 IN을 바로 사용할 수 없기 때문에
윈도우 함수 중 ROW_NUMBER를 사용한다 - 윈도우 함수 기본 구조
윈도우_함수() OVER (
PARTITION BY 그룹을 나눌 기준 컬럼
ORDER BY 정렬할 기준 컬럼 [ASC|DESC]
)
🔸2. 조건에 맞는 사용자 정보 조회하기
https://school.programmers.co.kr/learn/courses/30/lessons/164670?language=oracle
SELECT
USER_ID,
NICKNAME,
CITY || ' ' || STREET_ADDRESS1 || ' ' || STREET_ADDRESS2 AS "전체주소",
SUBSTR(TLNO, 1, 3) || '-' || SUBSTR(TLNO, 4, 4) || '-' || SUBSTR(TLNO, 8, 4) AS "전화번호"
FROM USED_GOODS_USER
WHERE USER_ID IN (
SELECT WRITER_ID
FROM USED_GOODS_BOARD
GROUP BY WRITER_ID
HAVING COUNT(BOARD_ID) >= 3
)
ORDER BY USER_ID DESC;
- || 연산자 : ||는 SQL에서 문자열을 연결하는 표준 연산자.
- CONCAT과 달리 여러 개의 문자열을 연속해서 연결할 수 있어 편리하다.
🔸3. 오랜 기간 보호한 동물
https://school.programmers.co.kr/learn/courses/30/lessons/59411?language=oracle
SELECT
O.ANIMAL_ID,
O.NAME
FROM ANIMAL_OUTS O
JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC
FETCH FIRST 2 ROWS ONLY;
- 날짜끼리의 비교와 차이 계산을 단순 산술 연산으로처리할 수 있다
- 즉, DATEDIFF같은 별도 함수가 필요없다.
🔸4. 있었는데요 없었습니다
https://school.programmers.co.kr/learn/courses/30/lessons/59043?language=oracle
SELECT
OUT.ANIMAL_ID,
OUT.NAME
FROM ANIMAL_OUTS OUT
JOIN ANIMAL_INS INS ON OUT.ANIMAL_ID = INS.ANIMAL_ID
WHERE OUT.DATETIME < INS.DATETIME
ORDER BY INS.DATETIME;
'코딩 테스트 > 02. SQL' 카테고리의 다른 글
| [프로그래머스]Oracle SQL_1(Lv4) (0) | 2025.09.25 |
|---|---|
| [프로그래머스]Oracle SQL_3(Lv3) (0) | 2025.09.21 |
| [프로그래머스] Oracle SQL_1(Lv3) (0) | 2025.09.19 |
| [프로그래머스]Oracle SQL_2(Lv2) (0) | 2025.09.16 |
| [프로그래머스]Oracle SQL_1(Lv2) (0) | 2025.09.13 |