SQL语法--------行统计(COMPUTE)笔记

行统计
由于GROUP BY 字句与列聚集函数配合,实现了指定列数据的统计,但是其输出结果只能看到最后的计算值,不能同时浏览被统计列的原始值,而这种显示原始数据同时输出统计值的格式,在许多场合,尤其报表中,是很重要的。为此功能,必须使用行统计<compute>字句。应该说行统计本质上并无多大差别,指示输出格式上的差异,网格格式以多表输出,文本格式以多行输出。行统计<compute>字句的格式如下:
 COMPUTE row_aggregate function(<col>)
 [{,row_aggregate function(<col>)}]
 [BY <col> [{, <col2>}]]
row_aggregate funciton()行聚类函数,行聚类函数中不能使用 DISTINCT 修饰语句和自变量(*)。所有行聚类函数row_aggregate function()如下
1.MAX(<F.exp>) 返回指定列表达式<F.exp>的所有值当中的最大值
2.MIN(<F.exp>) 返回指定列表达式<F.exp>的所有值当中的最小值
3.SUM(<F.exp>) 返回指定列表达式<F.exp>的所有值的累加总和
4.AVG(<F.exp>) 返回指定列表达式<F.exp>的所有值平均值
5.COUNT(<F.exp>)返回指定列表达式<F.exp>的所有非空值的个数和综合。
二.COMPUTE行统计<col>,即行聚集函数 row_aggregate functiont()的自变量,必须出现在select列表中。
例1.对商务类图书统计其平均价和综合
 
select title = convert(char(38),title),price from titles
where type = 'business' compute avg(price), sum( price)

显示结果如下:
title                                  price                
-------------------------------------- ---------------------
The Busy Executive's Database Guide    19.9900
Cooking with Computers: Surreptitious  11.9500
You Can Combat Computer Stress!        2.9900
Straight Talk About Computers          19.9900

                                       avg
                                       =====================
                                       13.7300

                                       sum
                                       =====================
                                       54.9200


(所影响的行数为 5 行)
三.BY 可选项通过制定<col1>,<col2>,定义行统计分组依据,按<col1>,<col2>不同值分组呕吐你估计。语法上规定,COMPUTE 字句的BY,必须和ORDER BY子句联合使用,且<col1>,<col2>列表,必须是ORDER BY子句列表的子集,排列顺序也必须一致:
例2:执行下面的语句
 SELECT type,pub_id,price
 FROM titles
 WHERE type like '[^a~d]%'
 ORDER BY pub_id
 COMPUTE avg(price) BY type
会出现如下的错误:
 计算依据列表与排序依据列表不匹配。

例3.在以字母"e"至"z"开头的类型中,分别对每一种类型"type",每一个出版商标识"pub_id"统计书单价平局值。以下三条命令符合上述语法规定:
--1
SELECT type, pub_id, price
FROM titles
WHERE type like '[^a~d]%'
 ORDER BY type, pub_id
 COMPUTE AVG(price) BY type, pub_id
--2
SELECT type, pub_id, price
 FROM titles
 WHERE type LIKE '[^a~d]%'
 ORDER BY type, pub_id
 COMPUTE AVG(price) BY type
--3
SELECT type, pub_id, price
 FROM titles
 WHERE type LIKE '[^a~d]%'
 ORDER BY type, pub_id
 COMPUTE AVG(price)
四:语法规定,COMPUTE BY 字句不能与INTO(讲一个表中的数据插入到另一张表中,通常用于备份附件或者进行存档)字句联用。

posted @ 2010-07-23 18:14  心的开始  阅读(4275)  评论(0编辑  收藏  举报