본문 바로가기
Tech/Database

PostgreSQL - greatest, least, SIGN함수

by Augustine™ 2018. 7. 3.
반응형

PostgreSQL의 최대값, 최소값을 구하는 함수는 greatest, least 이다. 다른 dbms의 MAX함수나 MIN함수처럼 함수명이 직관적이긴 한데, 굳이 이렇게 네이밍을 했어야 하나하는 생각은 든다.

정정 : 다시 확인해봤는데, postgreSQL에서 MAX, MIN과 GREATEST, LEAST의 사용법은 엄연히 다르다. MAX, MIN은 레코드중에서 최대/최소값을 구하는 것이고, GREATEST, LEAST는 여러 컬럼 값 중에서 최대/최소값을 구하는 것이다.


--3을 반환한다.
select   greatest(1, 2, 3) ; 
--quart_sales의 분기2 레코드의 최대/최소값을 반환한다.
select
MAX(분기2), MIN(분기2) 
from quart_sales;


SIGN 함수는 매개변수가 양수라면 1, 0일 땐 0, 음수라면 -1을 리턴하는 함수이다. 집계 쿼리에서 여러 레코드에 걸쳐 있는 값을 비교할 때, 매우 유용하게 사용할 수 있다.

아래는 테스트 데이터.


CREATE TABLE quart_sales (
    사업연도 integer
  , 분기1   integer
  , 분기2   integer
  , 분기3   integer
  , 분기4   integer
);

INSERT INTO quart_sales
VALUES
    (2015, 82000, 83000, 78000, 83000)
  , (2016, 85000, 85000, 80000, 81000)
  , (2017, 92000, 81000, NULL , NULL )
;


기업의 재무제표 데이터의 집계 쿼리를 구할 때, 아래와 같은 예는 매우 유용하게 활용될 수 있다.


1. 분기별 매출 증감 


SELECT
	사업연도
	, 분기1
	, 분기2
	, CASE
		WHEN 분기1 <분기2 THEN '+'
		WHEN 분기1 = 분기2 THEN ' '
		ELSE '-'
	END AS 분기2_분기1_증감
	, 분기2 - 분기1 as 분기2_분기1_차이
	, SIGN(분기2-분기1) as 분기2_분기1_SIGN
FROM quart_sales


결과는 아래와 같다.



2. 연간 4분기 매출 계산(Coalesce와 Sign 함수 활용)


SELECT
	사업연도
	, (COALESCE(분기1, 0) + COALESCE(분기2, 0) + COALESCE(분기3, 0) + COALESCE(분기4, 0))
	/ (SIGN(COALESCE(분기1, 0)) + SIGN(COALESCE(분기2, 0)) + SIGN(COALESCE(분기3, 0)) + SIGN(COALESCE(분기4, 0))) as 사업연도매출평균
FROM quart_sales


결과는 아래와 같다.


반응형

댓글