pbj0812의 코딩 일기

[SQL] PRECEDING 을 통한 증감비교 본문

ComputerLanguage_Program/SQL

[SQL] PRECEDING 을 통한 증감비교

pbj0812 2021. 3. 15. 01:49

0. 목표

 - PRECEDING 을 통한 증감비교

1. 실습

 1) 테이블 생성

CREATE TABLE sql_test.company
(
	company varchar(12),
	year int,
    sale int
);

 2) 데이터 삽입

INSERT INTO sql_test.company(company, year, sale) VALUES ('A', 2010, 100);
INSERT INTO sql_test.company(company, year, sale) VALUES ('A', 2011, 90);
INSERT INTO sql_test.company(company, year, sale) VALUES ('A', 2012, 110);
INSERT INTO sql_test.company(company, year, sale) VALUES ('A', 2013, 110);
INSERT INTO sql_test.company(company, year, sale) VALUES ('A', 2014, 130);
INSERT INTO sql_test.company(company, year, sale) VALUES ('B', 2010, 80);
INSERT INTO sql_test.company(company, year, sale) VALUES ('B', 2011, 110);
INSERT INTO sql_test.company(company, year, sale) VALUES ('B', 2012, 100);
INSERT INTO sql_test.company(company, year, sale) VALUES ('B', 2013, 100);
INSERT INTO sql_test.company(company, year, sale) VALUES ('B', 2014, 130);

 3) 데이터 확인

SELECT * FROM sql_test.company;

 4) 문제

  - 전년도보다 sale이 크면 + 같으면 = 작으면 - 표시

  - SIGN 은 0 이면 0, 음수면 -1, 양수면 1 반환

  - BETWEEN 1 PRECEDING AND 1 PRECEDING 을 통해 1개 전 레코드 만을 대상으로 비교

SELECT
	company,
    year,
    sale,
    CASE SIGN(sale - MAX(sale)
		OVER(PARTITION BY company
			ORDER BY year
            ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING))
		WHEN 0 THEN '='
        WHEN 1 THEN '+'
        WHEN -1 THEN '-'
        ELSE '' END AS result
FROM sql_test.company;

2. 참고

 - SQL 레벨업

Comments