postgreSQL,
출처 - 데이터분석을 위한 SQL 레시피
SELECT years,q1,q2,
CASE
WHEN q1<q2 THEN '+'
WHEN q1=q2 THEN ' '
ELSE '-'
END AS judge_q1_q2
FROM quarterly_sales
SELECT years,q1,q2,
q2-q1 AS diff_q2_q1
,sign(q2-q1) AS sign_q2_q1
FROM quarterly_sales
#최대최소 매출 - greatest, latest 함수
SELECT years, GREATEST(q1,q2,q3,q4) AS GREATEST_sales,
least(q1,q2,q3,q4) AS least_sales
FROM quarterly_sales
ORDER BY years;
#null값 0대체 후 평균계산
SELECT years,(COALESCE(q1,0)+COALESCE(q2,0)+COALESCE(q3,0)+COALESCE(q4,0))/4
AS average
FROM quarterly_sales
ORDER BY years
postgreSQL은 정수로 나누면 소수점이 잘리므로 명시적 자료 변환 일어남
실수를 상수로 앞에 두고 계산하면(100,0, 30,0과 같이) 암묵적 자료변환이 일어남
# 다른 데이터로 가공연습
DROP TABLE IF EXISTS advertising_stats;
CREATE TABLE advertising_stats (
dt varchar(255)
, ad_id varchar(255)
, impressions integer
, clicks integer
);
INSERT INTO advertising_stats
VALUES
('2017-04-01', '001', 100000, 3000)
, ('2017-04-01', '002', 120000, 1200)
, ('2017-04-01', '003', 500000, 10000)
, ('2017-04-02', '001', 0, 0)
, ('2017-04-02', '002', 130000, 1400)
, ('2017-04-02', '003', 620000, 15000)
;
#분모를 0으로 나누고 싶지 않을 때 분모가 0인 애들 NULL로 두기
SELECT dt,ad_id,
CASE WHEN impressions>0 THEN 100.0 * clicks/impressions # case-end문 사용
END AS ctr_as_percent_by_case,
100.0*clicks/NULLIF(impressions,0) AS ctr_as_percent_by_null # nullif함수 사용
FROM advertising_stats
'Database > SQL practice' 카테고리의 다른 글
Order by 함수와 OVER, 윈도우 함수 (0) | 2022.03.07 |
---|---|
그룹 테이블 함수 조작 (0) | 2022.03.07 |
결손 값(Null) 디폴트값으로 대체하기 (0) | 2022.03.07 |
Timestamp (0) | 2022.03.07 |
댓글