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

2025. 9. 20. 13:46·코딩 테스트/02. SQL

🔸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
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [프로그래머스]Oracle SQL_1(Lv4)
  • [프로그래머스]Oracle SQL_3(Lv3)
  • [프로그래머스] Oracle SQL_1(Lv3)
  • [프로그래머스]Oracle SQL_2(Lv2)
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바