그룹 함수란?
다양한 차원에서 데이터를 분석할 수 있는 함수. 데이터를 통계 내기 위한 소계, 중계를 구하는 함수이다.
SELECT col1, col2, aggregate_function(argument)
FROM table
GROUP BY GROUP_FUNCTION(col1, col2)
구조설명
ROLLUP | 소그룹 간 소계 계산 |
CUBE | 다차원적 소계 계산 |
GROUPING SETS | 특정 항목의 소계 계산 |
ROLLUP, CUBE, GROUPING SETS
CREATE OR REPLACE TABLE `dev-aileron-447402-k9.modulabs.employees` (
name STRING,
department STRING,
job STRING,
salary INT64
);
-- 임시 테이블에 데이터 삽입
INSERT INTO `dev-aileron-447402-k9.modulabs.employees` (name, department, job, salary)
VALUES
('Amy', 'Sales', 'Manager', 80000),
('Bob', 'Sales', 'Sales Rep', 50000),
('Charlie', 'Sales', 'Sales Rep', 55000),
('David', 'HR', 'Manager', 75000),
('Eve', 'HR', 'Recruiter', 60000),
('Frank', 'HR', 'Recruiter', 65000),
('Grace', 'IT', 'Manager', 90000),
('Hank', 'IT', 'Developer', 70000),
('Ivy', 'IT', 'Developer', 75000);

SELECT department, job, SUM(salary)
FROM modulabs.employees
GROUP BY department, job;

-- 부서(department), 직무(job)별 salary 소계: ROLLUP
SELECT department, job, SUM(salary)
FROM modulabs.employees
GROUP BY ROLLUP(department, job);

-- 부서(department), 직무(job)별 salary 소계: CUBE
SELECT department, job, SUM(salary)
FROM modulabs.employees
GROUP BY CUBE(department, job);

-- 부서(department), 직무(job)별 다양한 소계: GROUPING SETS
SELECT department, job, SUM(salary)
FROM modulabs.employees
GROUP BY GROUPING SETS((department, job), (department), ()); -- ()총계

로그 데이터란?
JSON 구조의 로그 데이터
웹 페이지, 어플리케이션, 응용 프로그램 등에서 수집된 동작 및 활동 정보
CREATE OR REPLACE TABLE dev-aileron-447402-k9.modulabs.user_logs (
log STRING,
user_id STRING,
action_detail STRING
);
-- 임시 테이블에 데이터 삽입
INSERT INTO dev-aileron-447402-k9.modulabs.user_logs (log, user_id, action_detail)
VALUES
('{"user": "user1", "action": "login", "timestamp": "2023-11-01T08:00:00"}', '1001', 'button_click'),
('{"user": "user2", "action": "logout", "timestamp": "2023-11-01T09:30:00"}', '1002', 'button_click'),
('{"user": "user1", "action": "purchase", "timestamp": "2023-11-01T10:15:00"}', '1001', 'button_click');

-- JSON_EXTRACT로 dictionary형 데이터 쪼개기
SELECT *,
JSON_EXTRACT(log, '$.user') AS user,
JSON_EXTRACT(log, '$.action') AS action,
JSON_EXTRACT(log, '$.timestamp') AS timestamp
FROM modulabs.user_logs;
'데이터 분석가:Applied Data Analytics > SQL' 카테고리의 다른 글
빅쿼리에서 "(double quotes)와 '(single quotes) 차이는? (0) | 2025.01.16 |
---|---|
SQL 심화학습 PV, UV (0) | 2025.01.13 |
윈도우함수 (0) | 2025.01.13 |
SQL 심화학습 (1) | 2025.01.10 |
혼자 공부하는 SQL-4장-SQL고급 문법 (0) | 2025.01.08 |