探讨SQL compute by的使用分析 |
本文标签:SQL,compute,by GROUP BY子句有个缺点,就是返回的结果集中只有合计数据,而没有原始的详细记录 。如果想在SQL SERVER中完成这项工作,可以使用COMPUTE BY子句 。COMPTE生成合计作为附加的汇总列出现在结果集的最后 。当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总 。 下列 SELECT 语句使用简单 COMPUTE 子句生成 titles 表中 price 及 advance 的求和总计: 复制代码 代码如下: USE pubs SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) 下列查询在 COMPUTE 子句中加入可选的 BY 关键字,以生成每个组的小计: USE pubs 复制代码 代码如下: SELECT type, price, advance FROM titles ORDER BY type COMPUTE SUM(price), SUM(advance) BY type 此 SELECT 语句的结果用12 个结果集返回,六个组中的每个组都有两个结果集 。每个组的第一个结果集是一个行集,其中包含选择列表中所请求的信息 。每个组的第二个结果集包含 COMPUTE 子句中两个 SUM 函数的小计 。 compute by 子句的规则: (1)不能将distinct与行统计函数一起使用 (2)compute ??? by 子句中 ???出的列必须出现在选择列表中 (3)不能在含有compute by 子句的语句中使用select into 子句,因为包括compute 子句的语句会产生不规则的行 。 (4)如果使用了compute by子句,则必须使用order by 子句, 而且compute by子句中的列必须包含在order by 子句中,并且对列的前后顺序和起始项都要一致(说白了compute by子句中的列必须是order by子句中列表的全部,或者前边的连续几个) 。 (5)如果compute 省略了 by ,则order by 也可以省略 (6)如果compute by 子句包含多列时,会将一个组(第一个列分的组)分成若干个子组(利用后面的列),并对每层子组进行统计 。 (7)使用多个compute by子句时,会分别按不同的组统计出结果 。详细信息还是按照正常的第一个分组方式显示 。 (8)compute by 子句中可以使用多个统计函数,他们互不影响 (9)compute by 子句中可以不包含by ,而只用compute 此时不对前面信息分组,而只对全部信息进行统计 。 比较 COMPUTE 和 GROUP BY COMPUTE 生成多个结果集 。一类结果集包含每个组的明细行,其中包含选择列表中的表达式 。另一类结果集包含组的子聚合,或 SELECT 语句 |