본문 바로가기
코딩테스트/SQL

[프로그래머스 고득점 kit] - SELECT (oracle), TO_CHAR, NVL, UNION, EXTRACT

by 앵유짱 2024. 1. 16.

조건에 맞는 도서 리스트 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/144853

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE,'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK
WHERE TO_CHAR(PUBLISHED_DATE,'YYYY') = '2021'
AND CATEGORY ='인문'
ORDER BY PUBLISHED_DATE
  • date format을 다루는 것이 핵심인 듯한 문제
  • select 할때도 날짜를 to_char로 변환해서 조회해야 한다
  • 컬럼명도 as published_date로 다시 설정해주기

 

 


12세 이하인 여자 환자 목록 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/132201

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT PT_NAME, PT_NO, GEND_CD, AGE, NVL(TLNO, 'NONE') TLNO
FROM PATIENT
WHERE GEND_CD = 'W'
AND AGE <=12
ORDER BY AGE DESC, PT_NAME ;

 

  • NVL을 사용하는 것이 핵심인 문제

 

NVL("값", "지정값")

- 값이 NULL인 경우 지정값 출력, NOT NULL인 경우 원래 값 출력

 

NVL2("값", "지정값1", "지정값2") 

NVL2("값", "NOT NULL", "NULL") 

- 값이 NOT NULL인 경우 지정값1 출력, NULL인 경우 지정값2 출력

 

  • NVL, NVL2 사용 방법 예시

https://gent.tistory.com/189

 

[Oracle] 오라클 NVL, NVL2 함수 사용방법 (null, 공백, 치환)

오라클 NVL, NVL2 함수 사용법 해당 칼럼의 값이 NULL 값인 경우 특정값으로 출력하고 싶으면 NVL 함수를 사용하고, NULL 값이 아닐 경우 특정값으로 출력하고 싶으면 NVL2 함수를 사용하면 된다. NVL 함

gent.tistory.com

근데 난 홑따옴표(') 부분을 자꾸 쌍따옴표(")로 써서 오답이었다..

 

oracle에서는

홑따옴표 (') 는 문자열 감싸기

쌍따옴표(") 는 컬럼명 감싸기

 

 


오프라인/온라인 판매 데이터 통합하기

https://school.programmers.co.kr/learn/courses/30/lessons/131537

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT TO_CHAR(SALES_DATE,'YYYY-MM-DD') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM
(
    (SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
    FROM ONLINE_SALE 
    WHERE 1=1
    AND EXTRACT ( YEAR FROM SALES_DATE) = '2022'
    AND EXTRACT ( MONTH FROM SALES_DATE) = '03' )  

	UNION ALL

    (SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
    FROM OFFLINE_SALE 
    WHERE 1=1
    AND EXTRACT ( YEAR FROM SALES_DATE) = '2022'
    AND EXTRACT ( MONTH FROM SALES_DATE) = '03' ) 
)

ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
  • 이것도 date format을 to_char로 변경해준다
  • extract로 년, 월을 추출해주고 union all 해줌
  • offline_sale과 online_sale을 union 했을때, offline_sale은 user_id가 없으므로 null처리를 해줌 (안하면 오류남)

 

  • where 1=1 쓰는 이유 : 디버깅 편하게 하기 위해서

https://hyjykelly.tistory.com/5

 

[MSSQL] WHERE 1=1이 뭐야? 왜 쓰는 거야?

회사에 입사하고 쿼리를 사용하면서 종종 보지만, 잘 이해가 가지 않는 구문이 생겼어요. WHERE 1=1 바로 요놈! 오늘 공부해보도록 할게요. Chapter 1. WHERE 1=1이 뭐야?? 우선, WHERE는 조회하려는 데이터

hyjykelly.tistory.com

 

  • extract 설명

+ extract 함수의 결과 데이터 타입은 NUMBER임 

https://statwith.tistory.com/464

 

【오라클 SQL 함수】 EXTRACT (datetime) 함수

오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크 o EXTRACT (datetime) 문 법 extract_datetime::= 목 적 EXTRACT 함수는 datetime 또는 구간 간격 표현식에서 사용자가 지정한 datetime 영역의 값을 추출하여 반환

statwith.tistory.com