[프로그래머스]Oracle SQL_3(Lv3)

2025. 9. 21. 16:10·코딩 테스트/02. SQL

1. 없어진 기록 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/59042?language=oracle

SELECT 
    O.ANIMAL_ID,
    O.NAME
FROM ANIMAL_OUTS O
    LEFT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID;
  • JOIN의 종류를 잘 선택해야한다
    • INNER JOIN : 보호소에 들어와서 입양을 간 동물
    • LEFT JOIN:  입양간 동물기준으로 그중 보호소에 있는 동물
    • RIGHT JOIN: 보호소에 있는 동물기준으로 입양간 기록이 있는 동물

2. 자동차 대여 기록에서 대여중/대여가능 여부 구분하기

https://school.programmers.co.kr/learn/courses/30/lessons/157340?language=oracle

SELECT
    DISTINCT CAR_ID,
    CASE
        WHEN CAR_ID IN
            (SELECT CAR_ID
             FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
             WHERE TO_DATE('2022-10-16', 'YYYY-MM-DD') BETWEEN START_DATE AND END_DATE)
        THEN '대여중'
        ELSE '대여 가능'
    END AS "AVAILABILITY"
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
ORDER BY CAR_ID DESC;
  • 문제의 핵심은 '2022-10-16'이라는 특정 시점에 대여 중인가 아닌가를 판별하는 것
  • 자동차가 과거에 대여된 기록이 있거나, 미래에 대여될 예정인지는 중요하지 않다. 오직 10월 16일 하루 동안의 상태만이 판단 기준이 된다.
  • 과거에 이미 반납이 완료되었거나, 아직 대여가 시작되지 않은 기록은 이 조건에 해당하지 않아 '대여 가능'으로 분류된다.

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

SELECT
    '/home/grep/src/'||F.BOARD_ID||'/'||F.FILE_ID||F.FILE_NAME||F.FILE_EXT AS "FILE_PATH"
FROM
    USED_GOODS_FILE F
JOIN (
    SELECT
        BOARD_ID
    FROM
        USED_GOODS_BOARD
    WHERE
        VIEWS = (SELECT MAX(VIEWS) FROM USED_GOODS_BOARD)
) B
ON F.BOARD_ID = B.BOARD_ID
ORDER BY FILE_ID DESC;
  • 집계 함수를 이용해 계산된 값을 WHERE 절에서 사용하려면, 집계 함수를 서브쿼리로 만들어서 값을 먼저 추출해야 한다. 이렇게 되면 WHERE 절은 서브쿼리가 반환한 단일 값(예: 가장 높은 조회수인 1234)과 각 행의 값을 비교하게 되어 논리적으로 오류 없이 실행된다.

즉, 서브쿼리를 사용하여 '테이블 전체에서 가장 큰 값'을 먼저 찾고, 그 값을 '각 행의 값'과 비교하는 방식으로 문제를 해결한다.

 

4. 헤비 유저가 소유한 장소

https://school.programmers.co.kr/learn/courses/30/lessons/77487?language=oracle

SELECT *
FROM PLACES
WHERE HOST_ID IN (SELECT HOST_ID
            FROM PLACES
            GROUP BY HOST_ID
            HAVING COUNT(ID) >= 2)
ORDER BY ID;

'코딩 테스트 > 02. SQL' 카테고리의 다른 글

[프로그래머스]Oracle SQL_2(Lv4)  (1) 2025.09.28
[프로그래머스]Oracle SQL_1(Lv4)  (0) 2025.09.25
[프로그래머스]Oracle SQL_2(Lv3)  (0) 2025.09.20
[프로그래머스] Oracle SQL_1(Lv3)  (0) 2025.09.19
[프로그래머스]Oracle SQL_2(Lv2)  (0) 2025.09.16
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [프로그래머스]Oracle SQL_2(Lv4)
  • [프로그래머스]Oracle SQL_1(Lv4)
  • [프로그래머스]Oracle SQL_2(Lv3)
  • [프로그래머스] Oracle SQL_1(Lv3)
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ROW_NUMBER
    AARRR
    tableau
    rank
    이행성
    solvesql
    코테
    streamlit
    revert
    tableaubootcamp
    코드잇스프린트후기
    cross_join
    프로그래머스
    DENSE_RANK
    Reset
    쿼리테스트
    git
    코딩테스트
    윈도우함수
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[프로그래머스]Oracle SQL_3(Lv3)
상단으로

티스토리툴바