科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL进行排序、分组、统计的10个新技巧

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文的一些技巧将会帮助你识别什么时候排序,什么时候分组,什么时候以及如何统计。对要每条语句和操作的详细信息请查看Books Online。

作者:赛迪网 lll 来源:天新网 2008年4月23日

关键字: SQL Server Mssql SQL

  • 评论
  • 分享微博
  • 分享邮件

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语句产生的详细记录。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章