pbj0812의 코딩 일기

[SQL] ROLLUP 을 이용한 여러 방법으로 평균 구하기 본문

ComputerLanguage_Program/SQL

[SQL] ROLLUP 을 이용한 여러 방법으로 평균 구하기

pbj0812 2021. 8. 28. 02:04

0. 목표

 - ROLLUP 을 이용한 결과 활용

1. 실습

 1) 테이블 생성

CREATE TABLE sql_test.rollup_test
(
	id int,
    name varchar(2),
	cnt int
);

 2) 데이터 삽입

INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(1, 'A', 1);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(2, 'A', 2);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(3, 'A', 3);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(4, 'A', 4);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(5, 'A', 5);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(6, 'A', 10);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(7, 'B', 1);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(8, 'B', 2);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(9, 'B', 3);
INSERT INTO sql_test.rollup_test(id, name, cnt) VALUES(10, 'C', 1);

 3) 전체 평균

SELECT AVG(cnt) FROM sql_test.rollup_test;

 4) 이름별 평균

SELECT name, AVG(CNT) 
FROM sql_test.rollup_test
GROUP BY name;

 5) 이름별 평균의 평균

SELECT
	AVG(cnt)
FROM (
	SELECT name, AVG(CNT)  AS cnt
	FROM sql_test.rollup_test
	GROUP BY name
) AS A;

 6) 이름별 평균 + 이름별 평균의 평균

SELECT
	name,
    AVG(cnt)
FROM (
	SELECT name, AVG(CNT)  AS cnt
	FROM sql_test.rollup_test
	GROUP BY name
) AS A
GROUP BY name WITH ROLLUP;

 7) 이름별 평균 + 전체 평균

  - 서브쿼리에서 이름별 숫자의 합과 데이터의 갯수를 구해서 ROLLUP 으로 연산

SELECT
	name,
    SUM(cnt) / SUM(cnt2)
FROM (
	SELECT name, SUM(CNT)  AS cnt, COUNT(id) AS cnt2
	FROM sql_test.rollup_test
	GROUP BY name
) AS A
GROUP BY name WITH ROLLUP;

Comments