新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > 数据库综合 > 正文:SQL进行排序、分组、统计的10个新技巧

SQL进行排序、分组、统计的10个新技巧

新客网 XKER.COM 2007-08-10 来源: lll 收藏本文

 

8.统计聚合数据

 

你可以继续统计数据为每个分组显示一个分类统计。SQL的ROLLUP操作符可以为每个分组显示一个额外的分类统计。这个分类统计是使用聚合函数计算每个分组中的所有记录得到的结果。下面的语句为每个分组计算OrderTotal:

 

SELECT Customer, OrderNumber, Sum(Cost * Quantity) 
AS OrderTotal FROM Orders GROUP BY Customer, 
OrderNumber WITH ROLLUP

 

 

 

对于有两个分别为20和25 OderTotal值的分组,ROLLUP显示一个OrderTotal值45。ROLLUP结果中的第一条记录是唯一的,因为它是计算所有分组记录,这个值是整个记录集的总值。

 

ROLLUP在聚合函数中不支持 DISTINCT,也不支持GROUP BY ALL语句。

 

9.统计每个列

 

CUBE操作符比ROLLUP更进一步,它返回每个分组中重复值的个数。它的结果和ROLLUP相同,但是对每位客户的每一列CUBE包含一个额外的记录。下面的语句显示每个分组的统计和额外每位客户的统计。

 

SELECT Customer, OrderNumber, Sum(Cost * Quantity) 
AS OrderTotal FROM Orders GROUP BY Customer, 
OrderNumber WITH CUBE

 

 

 

CUBE可以给最综合的统计。它不仅完成聚合和ROLLUP的功能,还可以计算定义分组的其它列,换句话说,CUBE统计每个可能的列组合。

 

CUBE不支持GROUP BY ALL语句。

 

10:对统计结果排序

 

当CUBE的结果令人迷惑时(它经常是这样),可以添加一个GROUPING函数,如下所示:

 

SELECT GROUPING(Customer), OrderNumber, 
Sum(Cost * Quantity) AS OrderTotal FROM Orders GROUP 
BY Customer, OrderNumber WITH CUBE

 

结果中每行包含两个额外的值:

 

值1表示左边的值是一个统计值,是ROLLUP或CUBE的操作符。

 

值0表示左边的值是一条由最初的GROUP BY语句产生的详细记录。

共3页: 上一页 [1] [2] [3] 下一页
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐