当前位置:  数据库>sqlserver

sql分组排序与分组统计技巧

    来源: 互联网  发布时间:2014-08-29

    本文导语:  在sql server中,有时需要分组来进行分析和统计。 sql提供了大量语句和操作来进行排序,分组和摘要。 本节分享的一些技巧将会帮助你识别什么时候排序,什么时候分组,什么时候以及如何统计。 对要每条语句和操作的详细...

在sql server中,有时需要分组来进行分析和统计。
sql提供了大量语句和操作来进行排序,分组和摘要。

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

1,使用排序使数据有序
通常,所有数据真正需要的仅仅是按某种顺序排列。
sql的order by语句可以以字母或数字顺序组织数据。
因此,相似的值按组排序在一起。然而,这个分组时排序的结果,并不是真的分组。
order by显示每条记录而分组可能代表很多记录。

2,进行分组除去重复值
排序和分组之间的最大区别是:排序的数据显示所有记录(在限定标准范围之内),而分组数据不是显示所有记录。
group by语句对于同样的值只显示一条记录。
例如,下面的语句中的group by语句对数据源中重复出现的数据只返回唯一的zip编码列。
 

代码示例:
select zip from customers group by zip

只包括由group by和select语句共同定义的那些记录,换句话说,select列表必须满足group by列表,但是有一个例外就是select列表可以包含聚合函数(group by语句不允许使用聚合函数)。需要注意的是group by语句不会对结果分组进行排序。为了使分组按字母或数字有序排列,需要添加order by语句。此外,在group by语句中不能引用使用了别名的字段。分组栏目必须是潜在的数据,但它们并不需要显示在结果中。

3,在分组之前进行数据筛选
可以添加一个where语句来筛选有group by所得分组中的数据。
例如,下面的语句只返回肯塔基州顾客的唯一zip编码列。
 

代码示例:
select zip from customerswherestate = ’ky’ group by zip

注意,where语句是在group by语句求值之前进行数据过滤的。
与group by语句一样,where语句也不支持聚合函数。

4,返回所有分组
当使用where语句过滤数据时,结果分组中只显示你指定的那些记录,而符合分组定义但是不满足过滤条件的数据不会包含在某个分组中。当你想在分组中包含所有数据时添加关键字all即可,这时where条件就不起作用。例如,在前面的例子中添加关键字all就会返回所有的zip分组,而不是仅在肯塔基州的那些。
 

代码示例:
select zip from customerswherestate = ’ky’ group by all zip

这样看来,这两个语句存在冲突,你可能不会以这种方式使用关键字all。当你使用聚合函数计算某一列时,使用all关键字可能会很方便。例如,下面的语句计算每个肯塔基州zip中的顾客数,同时,还会显示其它的zip值。
 

代码示例:
select zip, count(zip) as kycustomersbyzip from
customerswherestate = ’ky’ group by all zip

结果分组包括潜在数据中的所有zip值,然而,对于那些不是肯塔基州zip分组的聚合列(kycustomersbyzip)将会显示0。
远程查询不支持group by all。
 
5,分组后筛选数据
where语句在group by语句之前进行计算。当你需要在分组之后筛选数据时,可以使用having语句。通常情况下,where语句和having语句的返回结果是一样的,但是值得注意的是这两个语句不可互换。当你迷惑时,可以遵循下面的说明:使用where语句过滤记录,使用having语句过滤分组。

一般情况,你会使用having语句和某个聚合函数计算一个分组。例如,下面的语句返回一个唯一的zip编码列,但是可能不会包含潜在数据源中所有的zip。
 

代码示例:
select zip, count(zip) as customersbyzip from
customers group by zip having count(zip) = 1

只有那些包含一位顾客的分组显示在结果中。

6,进一步了解where和having语句
如果对何时应该使用where,何时使用having仍旧很迷惑,请遵照下面的说明:
where语句在group by语句之前;sql会在分组之前计算where语句。
having语句在group by语句之后;sql会在分组之后计算having语句。

7,使用聚合函数统计分组数据
分组数据可以帮助我们分析数据,但是有时我们可能需要更多的信息而不仅仅是分组。
可以使用聚合函数来统计分组数据。

例如,以下语句显示每批订购单的总价钱。
 

代码示例:
select orderid, sum(cost * quantity) as ordertotal
from orders group by orderid

对于其它的分组来说,select和group by列必须匹配。
而select语句包含聚合函数时这一规则是一个例外。

您可能感兴趣的文章:

    
 
 

您可能感兴趣的文章:

  • SQL分组排序去除重复实例
  • Sql Server多行合并一行 sql分组统计
  • sql分组查询(按组内个数排序)
  • SQL分组排序去重复的小实例
  • SQL分组统计简单例子
  • 显示同一分组中的其他元素的sql语句
  • sql中获取分组排序后数据方法实例
  • SQL语句分组获取记录的第一条数据的方法
  • SQL分组查询实例解析
  • sql语句获取分组排序后数据
  • sql server分组排序之row_number()over函数的使用
  • Sql Server 分组统计并合计总数(WITH ROLLUP用法)
  • sql server 2000/2005/2008中一句话完成分组后加序号
  • sql获取分组排序后数据的脚本
  • sql server分组查询与排序的例子
  • sql server数据分组查询脚本分析
  • SQL分组排序与分组查询统计
  • Sql Server 分组统计并合计总数及WITH ROLLUP应用
  • 以数据库字段分组显示数据的sql语句(详细介绍)
  • Sql Server:多行合并成一行,并做分组统计的两个方法
  • 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
  • 有关sql server的排序问题
  • Oracle 中文字段进行排序的sql语句
  • 大家讨论一下EJB QL的功能,和标准SQL相比,缺少什么功能?比如排序功能等。
  • SQL-ORDER BY 多字段排序(升序、降序)
  • sql查询表中根据某列排序的任意行语句
  • 在sql中不指定Order by排序是按照主键吗
  • sql Server使用ROW_NUMBER时不排序的实例代码
  • sql多条件多字段排序(图文教程)
  • sql union查询与排序的例子
  • SQL字符型字段按数字型字段排序实现方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • SQL Server统计SQL语句执行时间的脚本
  • sql语句实例 统计一个特定页面中的相关链接
  • sql语句实例 统计页面链接的sql语句
  • 经典sql代码--统计文章各种分类总数
  • SQL 平均数统计
  • 用SQL统计SQLServe表存储空间大小的代码
  • 经典sql代码--统计电话通话次数以及时长
  • SQL语句技巧:按月统计数据
  • 统计某一字段等于不同值的个数的sql语句
  • SQL按照日、周、月、年统计数据的方法
  • sql2005统计技巧示例
  • SQL 实现统计业务的例子
  • SQL 统计一个数据库中所有表记录的数量
  • SQL 实现某时间段的统计业务
  • SQL一条语句统计记录总数及各状态数
  • SQL按照日、周、月、年统计数据的方法分享
  • 经典sql代码--小计 合计 -统计
  • 统计sql server用户数据表大小(记录总数和空间占用情况)的代码
  • 一个用来统计相同姓名人数的SQl语句
  • sql 分类汇总统计代码
  • java命名空间java.sql接口statement的类成员方法: executeupdate定义及介绍
  • 请问,这是什么错误!java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][Named Pipes]??????? SQL Server?虽然分少,但一定给,只要您是前5名回复者中最好的以为!
  • java命名空间java.sql接口connection的类成员方法: nativesql定义及介绍
  • SQL查询分析工具 SQL Workbench/J
  • java命名空间java.sql接口preparedstatement的类成员方法: executeupdate定义及介绍
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • java命名空间java.sql接口rowid的类成员方法: getbytes定义及介绍
  • SQL客户端软件 PKLite SQL Client
  • java命名空间java.sql接口ref的类成员方法: getbasetypename定义及介绍
  • SQL语句实现SQL Server 2000及Sql Server 2005日志收缩(批量)
  • java命名空间java.sql接口databasemetadata的类成员方法: getsqlkeywords定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3