반응형
Case ≒ IF/ELSE문
- Case 표현식으로 IF/ELSE문과 같은 다양한 조건문 처리를 할 수 있다
---------- # CASE
SELECT
SUM (
CASE
WHEN RENTAL_RATE = 0.99 THEN 1
ELSE 0
END ) AS "C"
, SUM (
CASE
WHEN RENTAL_RATE = 2.99 THEN 1
ELSE 0
END ) AS "B"
, SUM (
CASE
WHEN RENTAL_RATE = 4.99 THEN 1
ELSE 0
END ) AS "A"
FROM
FILM
;
---------- # CASE
SELECT
SUM (
CASE
WHEN RENTAL_RATE = 0.99 THEN 1
ELSE 0 END ) AS "C"
, SUM (
CASE
WHEN RENTAL_RATE = 2.99 THEN 1
ELSE 0 END ) AS "B"
, SUM (
CASE
WHEN RENTAL_RATE = 4.99 THEN 1
ELSE 0 END ) AS "A"
FROM FILM
;
---------- # 위와 동일한 일반 SQL문
SELECT *
FROM (
SELECT
SUM(CASE WHEN RENTAL_RATE = 0.99 THEN CNT ELSE 0 END) AS C
, SUM(CASE WHEN RENTAL_RATE = 2.99 THEN CNT ELSE 0 END) AS B
, SUM(CASE WHEN RENTAL_RATE = 4.99 THEN CNT ELSE 0 END) AS A
FROM (
SELECT
RENTAL_RATE, COUNT(*) CNT
FROM FILM
GROUP BY RENTAL_RATE) A
) A
;
Coalesce - 첫번째 값 리턴
- Coalsesce 함수는 입력한 인자값 중에서 Null값이 아닌 첫번째 값을 리턴한다
- Null 처리할 때 유용 (ex. 500 - Null = Null)
---------- # Coalesce
SELECT
PRODUCT
, (PRICE - COALESCE(DISCOUNT, 0)) AS NET_PRICE -- Discount가 Null이면 0
FROM
TB_ITEM_COALESCE_TEST
;
---------- # CASE
SELECT
PRODUCT
, (PRICE -
CASE
WHEN DISCOUNT IS NULL THEN 0 -- Discount가 Null이면 0
ELSE DISCOUNT -- 아니면 Discount 값
END ) AS NET_PRICE
FROM
TB_ITEM_COALESCE_TEST
;
NullIf - Null or 첫번째값
- NullIf 함수는 입력한 두개의 인자값이 동일하면 Null을 리턴하고, 아니면 첫번째 인자값을 리턴한다
---------- # 여자 대비 남자 비율 구하기
SELECT
(SUM (
CASE
WHEN GENDER = 1 THEN 1
ELSE 0
END) /
SUM (
CASE
WHEN GENDER = 2 THEN 1
ELSE 0
END)) * 100 AS "MALE/FEMALE RATIO"
FROM
TB_MEMBER_NULLIF_TEST
;
---------- # 여자 대비 남자 비율 구하기 + NullIf
SELECT
(SUM (
CASE
WHEN GENDER = 1 THEN 1
ELSE 0
END) / -- 0으로 나누면 에러남
NULLIF (SUM ( -- 0이면 null 나오도록해서 sql 오류 피하기
CASE
WHEN GENDER = 2 THEN 1
ELSE 0
END), 0)
) * 100 AS "MALE/FEMALE RATIO"
FROM
TB_MEMBER_NULLIF_TEST
;
Cast - 형변환
- Cast 표현식은 데이터값을 특정 데이터 타입으로 형변환이 가능하도록 한다
- 각종 데이터 값을 CAST 표현식을 이용해 적절하게 형변환 한다
---------- # 문자열을 정수형으로 형변환
SELECT
CAST ('100' AS INTEGER);
SELECT
'100'::INTEGER;
---------- # 문자열을 실수형으로 형변환
SELECT
CAST ('10.2' AS DOUBLE PRECISION);
SELECT
'10.2'::DOUBLE PRECISION;
---------- # DATE타입으로 형변환
SELECT
CAST ('2015-01-01' AS DATE);
SELECT
'2015-01-01'::DATE;
Reference
- Fast Campus, 모두를 위한 SQL/DB 올인원 패키지 온라인 강의
반응형
'Data > Sql' 카테고리의 다른 글
[SQLD] 데이터 모델링의 이해 - ERD, 엔티티, 속성, 관계, 식별자 (1) | 2024.05.23 |
---|---|
[SQL] With문 - With문 활용, 재귀 쿼리 (0) | 2023.06.19 |
[SQL] 제약조건 - 기본키, 외래키, Check, Unique, Not Null (1) | 2023.06.19 |
[SQL] 데이터 타입 - Boolean, Char/Varchar/Text, Numeric, Integer, Serial, Date/Time/Timestamp (0) | 2023.06.19 |
[SQL] 테이블 관리 - 테이블 및 컬럼 생성/변경, CTAS, Truncate (0) | 2023.06.19 |