GROUP BY子句返回的结果集中只有合计数据,而没有原始的详细记录。COMPTE生成合计作为附加的汇总列出现在结果集的最后。当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。
(1)不能将distinct与行统计函数一起使用
(2)compute by 中列出的列必须出现在选择列表中
(3)不能在含有compute by 子句的语句中使用select into 子句,因为包括compute 子句的语句会产生不规则的行。
(4)compute 用了 by子句,则必须使用order by , 且compute by中的列必须是order by列表的全部,或者前边的连续几个。
(5)compute 省略了 by ,则order by 也可以省略。
(6)compute by 子句包含多列时,会将一个组(第一个列分的组)分成若干个子组(利用后面的列),并对每层子组进行统计。
(7)compute by 子句中可以使用多个统计函数,他们互不影响。
(8)compute 不包含by 时不对前面信息分组,而只对全部信息进行统计。
(9)COMPUTE 所生成的汇总值在查询结果中显示为单独的结果集。
当 COMPUTE 带 BY 子句时,符合 SELECT 条件的每个组都有两个结果集:
当 COMPUTE 不带 BY 子句时,SELECT 语句有两个结果集:
COMPUTE 和 GROUP BY 区别:
创建表如下:
CREATE TABLE PERSON
(部门 char(10),员工 char(6),工资 int,年龄 int)
INSERT INTO PERSON SELECT 'A','ZHANG',100,20
INSERT INTO PERSON SELECT 'A','LI',200,21
INSERT INTO PERSON SELECT 'A','WANG',300,22
INSERT INTO PERSON SELECT 'A','ZHAO',400,23
INSERT INTO PERSON SELECT 'B','DUAN',500,24
INSERT INTO PERSON SELECT 'B','DUAN',600,25
部门 员工 工资 年龄
A ZHANG 100 20
A LI 200 21
A WANG 300 22
A ZHAO 400 23
B DUAN 500 24
B DUAN 600 25
(1)GROUP BY
SELECT 部门,员工,SUM(工资)AS TOTAL,avg(年龄)as年龄
FROM PERSON
GROUP BY 部门,员工
结果:
部门 员工 工资 年龄
B DUAN 1100 24
A LI 200 21
A WANG 300 22
A ZHANG 100 20
A ZHAO 400 23
(2) COMPUTE
SELECT 部门,员工,工资,年龄
FROM PERSON
ORDER BY 部门,员工
COMPUTE SUM(工资) ,avg(年龄)
结果:
部门 员工 工资 年龄
A LI 200 21
A WANG 300 22
A ZHANG 100 20
A ZHAO 400 23
B DUAN 500 24
B DUAN 600 25
sum avg
2100 22
(3)COMPUTE BY
SELECT 部门,员工,工资,年龄
FROM PERSON
ORDER BY 部门,员工
COMPUTE SUM(工资) ,avg(年龄) by 部门
结果
部门 员工 工资 年龄
A LI 200 21
A WANG 300 22
A ZHANG 100 20
A ZHAO 400 23
sum avg
1000 21
部门 员工 工资 年龄
B DUAN 500 24
B DUAN 600 25
sum avg
1100 24