多维分析
多维分析指数据仓库应用程序中使用各种维度组合检查数据的常用过程。维度是用于划分数据(如时间、地理位置、公司部门、产品系列等)的类别。与一组特定的维度关联的结果称为事实。事实通常是与产品销售、利润、数量、计数等关联的数字。
为了在关系数据库系统中根据一组维度获取这些事实,通常将使用SQL聚合。SQL聚合基本上意味着数据是根据特定的标准(维度)分组的,结果集由事实的聚合(例如,每组数据的计数、总和及平均值)组成。
SQL SELECT命令的GROUP BY子句支持以下扩展,这些扩展可简化生成聚合结果的过程。
ROLLUP扩展
CUBE扩展
GROUPING SETS扩展
此外,还可在SELECT列表或HAVING子句中使用GROUPING函数和GROUPING_ID函数,以便在使用这些扩展时帮助解释结果。
为了举例说明用法,在本次讲述中广泛使用了dept和emp示例表。对这些表应用了以下更改,以提供更多信息性的结果。
UPDATE dept SET loc = 'BOSTON' WHERE deptno = 20;
INSERT INTO emp (empno,ename,job,deptno) VALUES (9001,'SMITH','CLERK',40);
INSERT INTO emp (empno,ename,job,deptno) VALUES (9002,'JONES','ANALYST',40);
INSERT INTO emp (empno,ename,job,deptno) VALUES (9003,'ROGERS','MANAGER',40);
将使用通过联结emp和dept表所生成的以下行:
SELECT loc, dname, job, empno FROM emp e, dept d
WHERE e.deptno = d.deptno
ORDER BY 1, 2, 3, 4;
loc | dname | job | empno
----------+------------+-----------+-------
BOSTON | OPERATIONS | ANALYST | 9002
BOSTON | OPERATIONS | CLERK | 9001
BOSTON | OPERATIONS | MANAGER | 9003
BOSTON | RESEARCH | ANALYST | 7788
BOSTON | RESEARCH | ANALYST | 7902
BOSTON | RESEARCH | CLERK | 7369
BOSTON | RESEARCH | CLERK | 7876
BOSTON | RESEARCH | MANAGER | 7566
CHICAGO | SALES | CLERK | 7900
CHICAGO | SALES | MANAGER | 7698
CHICAGO | SALES | SALESMAN | 7499
CHICAGO | SALES | SALESMAN | 7521
CHICAGO | SALES | SALESMAN | 7654
CHICAGO | SALES | SALESMAN | 7844
NEW YORK | ACCOUNTING | CLERK | 7934
NEW YORK | ACCOUNTING | MANAGER | 7782
NEW YORK | ACCOUNTING | PRESIDENT | 7839
(17 rows)
loc、dname和job列用于示例中使用的SQL聚合的维度。这些聚合生成的事实是使用COUNT(*)函数获取的员工数。
下面给出了对loc、dname和job列进行分组的基本查询。
SELECT loc, dname, job, COUNT(*) AS "employees" FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY loc, dname, job
ORDER BY 1, 2, 3;
使用不带扩展的基本GROUP BY子句生成的此结果集的行称为基础聚合行。
loc | dname | job | employees
----------+------------+-----------+-----------
BOSTON | OPERATIONS | ANALYST | 1
BOSTON | OPERATIONS | CLERK | 1
BOSTON | OPERATIONS | MANAGER | 1
BOSTON | RESEARCH | ANALYST | 2
BOSTON | RESEARCH | CLERK | 2
BOSTON | RESEARCH | MANAGER | 1
CHICAGO | SALES | CLERK | 1
CHICAGO | SALES | MANAGER | 1
CHICAGO | SALES | SALESMAN | 4
NEW YORK | ACCOUNTING | CLERK | 1
NEW YORK | ACCOUNTING | MANAGER | 1
NEW YORK | ACCOUNTING | PRESIDENT | 1
(12 rows)
ROLLUP和CUBE扩展通过为结果集提供小计的其他级别,添加到基础聚合行。
GROUPING SETS扩展提供将不同类型的分组合并到单个结果集的功能。
GROUPING和GROUPING_ID函数帮助解释结果集。
这些扩展提供的附加内容将在后面的章节中更详细地讨论。