compute

GROUP BY子句有个缺点,就是返回的结果集中只有合计数据,而没有原始的详细记录。如果想在SQL SERVER中完成这项工作,可以使用COMPUTE BY子句。COMPTE生成合计作为附加的汇总列出现在结果集的最后。当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。
1 不能将distinct与行统计函数一起使用
2 compute   by 中列出的列必须出现在选择列表中
3 不能在含有compute by 子句的语句中使用select into 子句,因为包括compute 子句的语句会产生不规则的行。
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 生成的结果集
当 COMPUTE 带 BY 子句时,符合 SELECT 条件的每个组都有两个结果集:
每个组的第一个结果集是明细行集,其中包含该组的选择列表信息。
每个组的第二个结果集有一行,其中包含该组的 COMPUTE 子句中所指定的聚合函数的小计。
当 COMPUTE 不带 BY 子句时,SELECT 语句有两个结果集:
每个组的第一个结果集是包含选择列表信息的所有明细行。
第二个结果集有一行,其中包含 COMPUTE 子句中所指定的聚合函数的合计。
COMPUTE 和 GROUP BY比较
COMPUTE 和 GROUP BY 区别:
GROUP BY 生成单个结果集。每个组都有一个只包含分组依据列和显示该组子聚合的聚合函数的行。选择列表只能包含分组依据列和聚合函数。
COMPUTE 生成多个结果集。一种结果集包含每个组的明细行,其中包含选择列表中的表达式。
例子:
原始表:
部门 员工 工资 年龄
            ZHANG     100    20
            LI        200    21
            WANG      300    22
            ZHAO      400    23
            DUAN      500    24
            DUAN      600    25
1.GROUP BY
SELECT 部门,员工,SUM(工资)AS TOTAL,avg(年龄)as年龄
FROM PERSON
GROUP BY 部门,员工
结果:
部门 员工 工资 年龄
            DUAN      1100    24
            LI        200    21
            WANG      300    22
            ZHANG     100    20
            ZHAO      400    23
2.COMPUTE
SELECT 部门,员工,工资,年龄
FROM PERSON
ORDER BY 部门,员工
COMPUTE  SUM(工资) ,avg(年龄)
结果:
部门 员工 工资 年龄
            LI        200    21
            WANG      300    22
            ZHANG     100    20
            ZHAO      400    23
            DUAN      500    24
            DUAN      600    25
sum avg
2100    22
(3)COMPUTE  BY
SELECT 部门,员工,工资,年龄
FROM PERSON
ORDER BY 部门,员工
COMPUTE  SUM(工资) ,avg(年龄) by 部门
结果
部门 员工 工资 年龄
            LI        200    21
            WANG      300    22
            ZHANG     100    20
            ZHAO      400    23
sum avg
1000    21
部门 员工 工资 年龄
            DUAN      500    24
            DUAN      600    25
sum avg
1100    24
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值