pbj0812의 코딩 일기

[SQL] 윈도우 함수를 이용한 이동 평균 구하기 본문

ComputerLanguage_Program/SQL

[SQL] 윈도우 함수를 이용한 이동 평균 구하기

pbj0812 2022. 9. 27. 01:09

0. 목표

 - 윈도우 함수를 이용한 이동 평균 구하기

1. 실습

 1) 테이블 / 데이터 생성

DROP TABLE sql_test.window_practice;
CREATE TABLE sql_test.window_practice
(
	id varchar(256),
    category varchar(256),
    price int
);

INSERT INTO sql_test. window_practice(id, category, price) VALUES('A', 'a', 100);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('A', 'b', 100);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('A', 'b', 200);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('A', 'c', 300);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('A', 'd', 400);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('A', 'e', 500);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('B', 'a', 100);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('B', 'b', 200);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('B', 'c', 300);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('B', 'd', 400);
INSERT INTO sql_test. window_practice(id, category, price) VALUES('B', 'e', 500);

 2) 데이터 확인

SELECT * FROM sql_test.window_practice;

 3) id 로만 평균 내기

  (1) 방법1

SELECT 
	id,
    AVG(price) AS avg_price 
    
FROM sql_test.window_practice 

GROUP BY 1
ORDER BY 1 ASC;

  (2) 방법2

SELECT 
	id,
    category,
    AVG(price) OVER(PARTITION BY id) AS avg_price
    
FROM sql_test.window_practice;

 4) id 기준으로 나누고 category 기준으로 이동 평균 구하기

SELECT 
	id,
    category,
    price,
    AVG(price) OVER(PARTITION BY id ORDER BY category) AS avg_price
    
FROM sql_test.window_practice;

 5) id 기준으로 나누고 category, price 기준으로 이동 평균 구하기

SELECT 
	id,
    category,
    price,
    AVG(price) OVER(PARTITION BY id ORDER BY category, price) AS avg_price

FROM sql_test.window_practice;

Comments