SQL & DB/PostgreSQL

[PostgreSQL] 값 비교(CASE, SIGN, GREATEST, LEAST), 평균값 구하기

YSY^ 2021. 1. 7. 16:14

DATASET 을 만들기 위한 코드입니다.

DROP TABLE IF EXISTS quarterly_sales;
CREATE TABLE quarterly_sales (
    year integer
  , q1   integer
  , q2   integer
  , q3   integer
  , q4   integer
);

INSERT INTO quarterly_sales
VALUES
    (2015, 82000, 83000, 78000, 83000)
  , (2016, 85000, 85000, 80000, 81000)
  , (2017, 92000, 81000, 80000, 90000 )
  , (2018, 80000, 83000, 90000, 91000 )
  , (2019, 98000, 83000, NULL , NULL )

;

 

조건문 비교(CASE)

CASE는 파이썬 등의 IF문과 같은 구조입니다. WHEN으로 조건을 설정하고 THEN으로 조건에 따른 결과를 표시합니다. END를 활용하여 CASE문을 끝냅니다.

CASE WHEN (조건) THEN (값설정)
	 WHEN (조건) THEN (값설정)
     ELSE (값설정)
     END AS ~~

CASE문을 활용해서 Q1과 Q2의 값을 비교해보겠습니다.

Select year
	,q1
	,q2
	,CASE WHEN q1 < q2 THEN '+'
		  WHEN q1 = q2 THEN ' '
		  ELSE '-'
	END AS judge
	, q2-q1 as diff_q2_q1

from quarterly_sales
order by year;

 

양수/음수 판정(SIGN)

위와 같은 경우 CASE문 대신 SIGN문을 활용할 수 있습니다. 양수라면 1, 0이라면 0, 음수라면 -1로 판정합니다.

Select year
	,q1
	,q2
	, q2-q1 as diff_q2_q1
	, sign(q2 - q1) as sign_q2_q1
from quarterly_sales
order by year;

 

최대값/최소값 (GREATEST / LEAST)

GREATEST함수와 LEAST함수를 활용하여 최대값, 최소값을 구할 수 있습니다.

Select year
	,GREATEST(q1,q2,q3,q4) AS greatest_sales
	,LEAST(q1,q2,q3,q4) AS least_sales
from quarterly_sales

 

결측값이 있을 때 평균값 구하기

NULL값이 있을 때 평균을 구하는 쿼리입니다.

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)))
from quarterly_sales;

728x90
반응형