[프로그래머스]Oracle SQL(Lv2,10문제)

2025. 9. 12. 12:14·코딩 테스트/02. SQL

<< 오라클 문법 기록장 >>

🔸1. 카테고리별 상품 개수 구하기

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

SELECT 
    SUBSTR(PRODUCT_CODE, 1, 2) AS CATEGORY,
    COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY SUBSTR(PRODUCT_CODE, 1, 2)
ORDER BY CATEGORY;

 

 

  • 오라클에서 자주 사용하는 문자열 처리 함수
함수 설명 다른 DBMS에서의 차이 / 예시
INITCAP(string) 각 단어의 첫 글자를 대문자로 변환합니다. MySQL, PostgreSQL에서는 기본 제공 X
→ CONCAT + UPPER/LOWER 조합으로 구현
INITCAP('oracle is powerful') → 'Oracle Is Powerful'
MySQL, PostgreSQL도 지원하지만 Oracle에서 자주 사용
LPAD(string, total_len, [pad_char]) 문자열 왼쪽에 특정 문자를 채워 전체 길이를 맞춥니다. LPAD('123', 5, '0') → '00123'

RPAD(string, total_len, [pad_char]) 문자열 오른쪽에 특정 문자를 채워 전체 길이를 맞춥니다. RPAD('123', 5, '*') → '123**'
함수 기능 예시
SUBSTR(string, position, [length]) 문자열의 특정 부분을 추출합니다. SUBSTR('Oracle', 1, 3) → 'Ora'
REPLACE(string, search, replacement) 특정 문자열을 다른 문자열로 바꿉니다. REPLACE('Hello World', 'World', 'Oracle') → 'Hello Oracle'
TRIM([leading|trailing|both] FROM string) 문자열 양 끝 또는 한쪽의 공백이나 특정 문자를 제거합니다. TRIM(' Oracle ') → 'Oracle'
LENGTH(string) 문자열의 길이를 반환합니다. LENGTH('Oracle') → 6
INSTR(string, substring) 문자열 내에서 특정 문자열이 시작하는 위치를 반환합니다. INSTR('Oracle is', 'is') → 8
UPPER(string) 모든 문자를 대문자로 변환합니다. UPPER('oracle') → 'ORACLE'
LOWER(string) 모든 문자를 소문자로 변환합니다. LOWER('ORACLE') → 'oracle'

🔸2. 중성화 여부 파악하기

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

 

오라클에서 IF함수를 지원하지 않으며, 조건문을 사용하려면 DECODE함수나 CASE문을 사용해야한다.

 

1) CASE WHEN문 사용

  • 여러 조건을 처리할 때  사용
  • LIKE와 같은 패턴 매칭이 포함된 복잡한 조건에서 사용
SELECT
    ANIMAL_ID,
    NAME,
    CASE
        WHEN SEX_UPON_INTAKE LIKE '%Neutered%' 
        OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
    ELSE 'X' 
    END AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

 

2) DECODE 함수

  • 간단한 조건문 (IF-ELSE)을 구현할 때 유용하다
  • 특정값과 일치하는지 비교하는 용도로 사용
  • SEX_UPON_INTAKE컬럼이 정확히 'Neutered Male' 또는 'Spayed Female'과 일치하는 경우라면 DECODE를 사용할 수 있다.
SELECT
    ANIMAL_ID,
    NAME,
    DECODE(
        SEX_UPON_INTAKE,
        'Neutered Male', 'O',
        'Spayed Female', 'O',
        'X'
    ) AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

🔸나머지 문제 풀이

3. 동물수 구하기

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

SELECT COUNT(ANIMAL_ID) AS COUNT
FROM ANIMAL_INS

4. 최솟값 구하기

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

SELECT DATETIME
FROM ANIMAL_INS
ORDER BY DATETIME
FETCH FIRST 1 ROW ONLY;

5. 동명 동물 수 찾기

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

SELECT 
	NAME,
    COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;

 

6. 이름에  el이 들어가는 동물 찾기

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

SELECT 
    ANIMAL_ID,
    NAME
FROM ANIMAL_INS
WHERE UPPER(NAME) LIKE '%EL%'
    AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME

7. NULL처리하기

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

SELECT
    ANIMAL_TYPE,
    COALESCE(NAME,'No name'),
    SEX_UPON_INTAKE 
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

8. DATETIME에서 DATE로 형 변환

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

SELECT 
    ANIMAL_ID,
    NAME,
    TO_CHAR(DATETIME,'YYYY-MM-DD') AS "날짜"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

9. 중복 제거하기

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

SELECT
    COUNT(DISTINCT(NAME)) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL

10. 가격이 제일 비싼 식품의 정보 출력하기

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

SELECT
    PRODUCT_ID,
    PRODUCT_NAME,
    PRODUCT_CD,
    CATEGORY,
    PRICE
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
FETCH FIRST 1 ROW ONLY;

 

 

 

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

[프로그래머스]Oracle SQL_2(Lv2)  (0) 2025.09.16
[프로그래머스]Oracle SQL_1(Lv2)  (0) 2025.09.13
[프로그래머스] Oracle SQL (Lv1, 24문제)  (1) 2025.09.11
[Hacker Rank] SQL Intermediate 'Symmetric Pairs' (Medium)  (4) 2025.08.22
[Hacker Rank] SQL Intermediate 'Contest Leaderboard' (Medium)  (0) 2025.08.22
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [프로그래머스]Oracle SQL_2(Lv2)
  • [프로그래머스]Oracle SQL_1(Lv2)
  • [프로그래머스] Oracle SQL (Lv1, 24문제)
  • [Hacker Rank] SQL Intermediate 'Symmetric Pairs' (Medium)
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[프로그래머스]Oracle SQL(Lv2,10문제)
상단으로

티스토리툴바