앎을 경계하기

Data Science

실무 SQL 공부 3-2 - 데이터 가공 SQL

양갱맨 2022. 1. 15. 19:10

여러 개 값 조작

1. 문자열 연결하기

CONCAT함수나 ||연산자를 사용한다.

SELECT user_id,
    -- redshift에서는 매개변수 2개까지 밖에 안되기때문에 ||를 사용하여 연결하는것이 좋음
    CONCAT(pref_name, city_name) AS pref_city,
    pref_name || city_name AS pref_city
FROM mst_user_location

2. 여러 개 값 비교하기

4분기 매출 테이블에서 분기별 매출 증감을 판정하는 예제

SELECT year, q1, q2,
    -- q1, q2 매출 변화 평가
    CASE WHEN q1 < q2 THEN '+'
        WHEN q2 = q2 THEN ' '
        ELSE '-'
    END AS judge_q1_q2,
    --q1, q2 매출액 차이 계산
    q2 - q1 AS diff_q2_q1,
    --q1, q2의 매출 변화를 1, 0, -1로 표현
    SIGN(q2 - q1) AS sign_q2_q1
FROM quarterly_sales
ORDER BY year

연간 최대/최소 4분기 매출 찾기 예제

SELECT year,
    -- q1~q4 최대 매출 구하기
    greatest(q1,q2,q3,q4) AS greatest_sales,
    -- 최소 매출
    least(q1,q2,q3,q4) AS least_sales
FROM quarterly_sales
ORDER BY year

연간 평균 4분기 매출 계산 예제

SELECT year,
    (q1 + q2 + q3 + q4) / 4 AS average
FROM quarterly_sales
ORDER BY year

NULL 값을 사칙연산하려면 COALESCE함수를 사용해야한다.

대신 평균을 구할 때, 0으로 변환하게 되면 평균 값이 크게 낮아지게 된다.

SELECT year,
    (COALESCE(q1, 0)+COALESCE(q2, 0)+COALESCE(q3, 0)+COALESCE(q4, 0)) / 4 AS average
FROM quarterly_sales
ORDER BY year

만약 NULL이 아닌 값으로면 평균을 구하려면 NULL이 아닌 컬럼 수만 세서 나눠야한다.

SIGN함수가 양수이면 1, 0이면 0, 음수이면 -로 표시하기 떄문에 이를 사용해서 NULL을 0으로 대치한 후, 0이 아닌 컬럼만 세서 평균을 구할 수 있다.

SELECT year,
    (COALESCE(q1, 0)+COALESCE(q2, 0)+COALESCE(q3, 0)+COALESCE(q4, 0)) / 
    (SIGN(COALESCE(q1, 0)) + SIGN(COALESCE(q2, 0)) + SIGN(COALESCE(q3, 0)) + SIGN(COALESCE(q4, 0))) as average
FROM quarterly_sales
ORDER BY year

'Data Science' 카테고리의 다른 글

ABC 분석  (0) 2022.02.02
실무 SQL 공부 3-3 - 데이터 가공 SQL  (2) 2022.01.22
실무 SQL 공부 3-1 - SQL로 데이터 가공  (0) 2022.01.15
실무 SQL 공부 2 - 데이터  (0) 2022.01.15
실무SQL공부 1 - 미들웨어 시스템  (0) 2022.01.15