Oracle을 이용해 프로그래머스 레벨1 문제를 모두 풀며 잊지 않기 위한 내용을 정리합니다. 문제링크는 생략합니다.

 

 

1. 상위 N개 행 조회하기

ROWNUM을 이용하는 방법.

SELECT NAME
FROM (SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME)
WHERE ROWNUM <= 1;

 

2. NULL 처리

NVL : NULL값이 있으면 다른 NULL이 아닌 지정값으로 조회되도록 하는 함수

SELECT warehouse_id, warehouse_name, address, NVL(freezer_yn, 'N')
from food_warehouse
where address like '경기도%';

 

-- 코드를 입력하세요
SELECT PT_NAME, PT_NO, GEND_CD, AGE, NVL(TLNO, 'NONE')
FROM PATIENT
WHERE AGE <= 12 AND GEND_CD = 'W'
ORDER BY AGE DESC, PT_NAME;

 

3. 날짜처리

TO_CHAR : 날짜 데이터와 형식을 인자로 넘기면 형식에 맞추어 출력해주는 함수

SELECT COUNT(*) AS USERS
FROM USER_INFO
WHERE TO_CHAR(JOINED, 'YYYY') = '2021' AND AGE >=20 AND AGE <= 29;

 

-- 코드를 입력하세요
SELECT dr_name, dr_id, mcdp_cd, to_char(hire_ymd, 'yyyy-mm-dd')
from doctor
where mcdp_cd IN ('CS', 'GS')
order by hire_ymd desc, dr_name asc;

 

 

4. 기본 JOIN

아직 JOIN에 대해 깊이있게 이해를 못해서 추가적으로 공부가 필요합니다.

SELECT H.FLAVOR
FROM FIRST_HALF H
INNER JOIN ICECREAM_INFO I ON H.FLAVOR = I.FLAVOR
WHERE H.TOTAL_ORDER > 3000 AND I.INGREDIENT_TYPE = 'fruit_based';

 

SELECT B.TITLE,
       B.BOARD_ID,
       R.REPLY_ID,
       R.WRITER_ID,
       R.CONTENTS,
       TO_CHAR(R.CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE
FROM USED_GOODS_BOARD B
INNER JOIN USED_GOODS_REPLY R ON B.BOARD_ID = R.BOARD_ID
WHERE TO_CHAR(B.CREATED_DATE, 'YYYYMM') = '202210'
ORDER BY R.CREATED_DATE, B.TITLE;

 

 

5. 평균, 반올림

AVG는 평균을 구해주며

ROUND는 반올림한 값을 줍니다. ROUND의 두번째 인자값에 따라 반올림 위치를 지정할 수 있습니다.

두번째 인자를 적지 않는다면 0으로 인식하며 소수점 첫째짜리에서 반올림한 값을 리턴합니다.

SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';

 

 

6. CASE-WHEN-THEN

주어진 테이블의 정보를 통해 새로운 컬럼을 만들고 싶을때 사용하는 것으로 이해했습니다.

조건이 여러개라면 WHEN-THEN-WHEN-THEN...형태로 이어붙이면 되는것 같습니다.

-- 코드를 입력하세요
SELECT HISTORY_ID, CAR_ID, TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE, TO_CHAR(END_DATE, 'YYYY-MM-DD') AS END_DATE,
CASE WHEN(END_DATE - START_DATE + 1) >= 30 THEN '장기 대여' ELSE '단기 대여' END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09'
ORDER BY HISTORY_ID DESC;

 

 

 

+ Recent posts