`
sty2008boy
  • 浏览: 301576 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

SQL排序技巧

阅读更多

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语句包含聚合函数时这一规则是一个例外.
 

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

分享到:
评论

相关推荐

    帆软:排序问题(通过帆软设置或者sql排序)

    在数据分析和报表制作的过程中,排序是一项基础且至关重要的任务。帆软报表作为一款强大的报表工具,提供了多种排序方式,既能通过界面配置...提供的“帆软排序测试例子”文件可以用于进一步学习和实践这些排序技巧。

    排序函数(sqlserver)

    在SQL Server数据库管理系统中,排序函数是不可或缺的一部分,它们用于对查询结果进行升序或降序排列,使得数据按照特定的顺序...理解和熟练掌握这些排序技巧,将有助于我们编写出更高效、更符合业务需求的SQL查询。

    SQL排序查询_IT文库

    本章将介绍Oracle数据库中的SQL排序查询技巧,并通过具体的SQL查询示例,帮助读者快速上手。 首先,我们来了解一下SQL排序查询的基本语法。在SQL中,我们使用ORDER BY子句来指定排序的规则。ORDER BY子句可以出现在...

    常用sql语句技巧大全

    ### 常用SQL语句技巧详解 #### 1. 创建临时表(只平移结构) **场景描述:** 在数据库开发过程中,有时我们需要创建一个与现有表结构完全相同但不包含任何数据的新表,这样的操作可以用于测试、数据迁移等场景。 ...

    SQLSERVER技巧集锦

    根据提供的文件信息,我们可以整理出一系列关于SQL Server的实用技巧,涵盖了数据操作、查询优化、安全设置等多个方面。下面将详细解析这些技巧及其应用场景。 ### 1. 转换日期格式 - **技巧**: 使用`CONVERT`函数...

    SQL Server分组排序取数据的实现

    在SQL Server中,分组和排序是数据处理的两个关键操作。它们可以帮助我们对大量数据进行聚合、组织和筛选,以便更好地分析和理解数据。...理解并熟练运用这些SQL技巧将极大地提升数据查询和分析的效率。

    SQL自定义排序

    ### SQL自定义排序知识点详解 #### 一、背景与需求分析 在进行数据库查询操作时,我们经常会遇到这样的情况:数据库中的表按照某列进行了...掌握这一技巧对于提高SQL查询的能力以及更好地服务于业务有着重要的意义。

    数据库SQL操作技巧

    数据库SQL操作技巧是IT行业中必不可少的一项技能,尤其在ORACLE和SQL SERVER这两种广泛使用的数据库管理系统中,掌握高效、精准的SQL语法和优化方法至关重要。本文将深入探讨SQL的基础概念、常用查询语句、数据操作...

    SQL技巧全集-整理

    SQL技巧全集是数据库管理员、数据分析师和开发人员的宝贵资源,涵盖了多种实用的查询、操作和优化技术。以下是一些核心的SQL知识点,根据标题和描述进行详细阐述: 1. **SQL操作大全**:SQL操作包括了数据的增...

    SQL语句运用技巧

    ### SQL语句运用技巧 #### 一、SQL语言概述 SQL(Structured Query Language,结构化查询语言)是一种用于处理数据库的标准计算机语言。它允许用户在数据的高层次结构上操作而无需关心具体的存储细节。SQL的强大之...

    如何写出高效率的SQL语句--SQL优化技巧

    如何写出高效率的SQL语句--SQL优化技巧 SQL 优化技巧是提高数据库性能的关键所在。编写高效率的 SQL 语句需要对索引的机制有一定了解,以下是关于索引的知识点: 索引的优点和局限 索引可以提高查询的效率,但会...

    sql模糊查询并按匹配度排序

    通过以上分析,我们可以看出SQL模糊查询及其排序不仅是一种实用的数据库查询技巧,也是一种需要细致考量的技术方案。合理地设计查询逻辑可以大大提高查询效率和准确性,同时也能确保系统的稳定性和安全性。

    sql2005 非常强大的 分页 支持排序

    ### SQL2005 强大的分页及排序功能解析 #### 核心知识点概览 本文将深入探讨一个在 SQL Server 2005 中实现...无论是开发人员还是数据库管理员,掌握这种高级的分页和排序技巧都将极大地提升工作效率和数据处理能力。

    [电子书] SQL Server 2012 T-SQL 实用技巧 (英文版)

    《SQL Server 2012 T-SQL 实用技巧》是一本专为SQL Server 2012数据库管理员和开发人员编写的指南,由Apress出版社出版。这本书以英文呈现,旨在提供解决日常T-SQL编程挑战的具体解决方案,涵盖了T-SQL语言的广泛...

    ms sql语句怎么样对随机记录进行排序

    通过以上分析,我们可以看到,在MS SQL Server中实现随机记录排序是一个结合了基础SQL语法和高级查询技巧的过程。理解并熟练掌握这些知识点,对于提升数据库管理技能和优化数据处理流程具有重要意义。

    oracle SQL优化技巧

    Oracle SQL 优化技巧 Oracle SQL 优化是提高数据库性能的关键技巧之一。以下是 Oracle SQL 优化的 12 个技巧: 1. 选择最有效率的表名顺序 在基于规则的优化器中,Oracle 的解析器按照从右到左的顺序处理 FROM ...

    SQL 常用语句 sql简单技巧

    这里我们将深入探讨一些在MS SQL Server中常用的SQL技巧,这些技巧可以帮助数据库管理员和开发人员更加高效地工作。 1. **连接服务器**: 在MS SQL Server中,可以通过`sp_oamethod`和`sp_oasetproperty`这两个...

    SQL Server 2012 T-SQL 实用技巧 (英文版)

    《SQL Server 2012 T-SQL 实用技巧 (英文版)》是一本专注于Microsoft SQL Server 2012中的Transact-SQL(T-SQL)编程技术的专业书籍。T-SQL是SQL Server的核心查询语言,用于数据管理和处理。本书针对数据库管理员、...

    sql经验总结技巧—非常的实用

    在SQL Server数据库管理中,掌握一些实用的技巧能够显著提升工作效率。以下是一些关于SQL Server的经验总结,涵盖了问题解决、日期处理、数据操作、查询优化等多个方面: 1. **处理挂起的安装操作**:当安装SQL ...

    sql优化技巧大全

    本文将详细介绍一系列SQL优化技巧,适用于Oracle等数据库系统。 首先,了解Oracle优化器是理解SQL优化的基础。Oracle的优化器是一个内置的代价引擎,它通过分析可能的执行计划并估算每个计划的成本来决定最优的执行...

Global site tag (gtag.js) - Google Analytics