语法:Compute avg|count|max|min|sum by 表达式
1、举一个例子
比如有一个数据表:表名为person,三个字段分别为 name,age,country
select name,country,age from person where ?? order by a compute sum(age),max(age),min(age) by country
这个语句在查询时将数据按照country分组,然后分别显示每组的详细信息和统计信息。结果可能如下:
name countryage
张三 中国16
李四 中国21
王五 中国24
sum max min
612416
=================================
name countryage
泰森 美国 20
布什 美国 24
盖茨 美国 25
sum max min
69 2520
=============================================
name countryage
妓子 日本 12
完犊子日本 14
猪生逆子 日本 15
sum max min
41 1512
我们很容易看出她其实是在一个查询结果中包含了三个子查询(根据country不同而分的组),每个子查询又包含两个子查询(一个是详细信息,一个是统计信息)
2、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 此时不对前面信息分组,而只对全部信息进行统计。
在SQL中可以使用COMPUTE BY子句来实现返回的结果集中有合计数据,还有有原始的详细记录。
COMPTE生成合计作为附加的汇总列出现在结果集的最后。当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。
COMPUTE 生成多个结果集。一类结果集包含每个组的明细行,其中包含选择列表中的表达式。另一类结果集包含组的子聚合,或 SELECT 语句 的总聚合。
选择列表可包含除分组依据列或聚合函数之外的其它表达式。聚合函数在 COMPUTE 子句中指定,而不是在选择列表中。
扩展资料:
compute by 子句的规则:
(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 也可以省略。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)