`

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

    博客分类:
  • SQL
 
阅读更多

今天在博客园网看到一片好文章,是关于sql排序,分组和统计的技巧方面的!特拿来与大家分享!呵呵

1.使用排序使数据有序

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

2.进行分组除去重复值

 

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

SELECT ZIP FROM Customers GROUP BY ZIP

 

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

3.在分组之前进行数据筛选

 

你可以添加一个WHERE语句来筛选有GROUP BY所得分组中的数据。例如,下面的语句只返回肯塔基州顾客的唯一ZIP编码列。

SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ZIP

 

必须注意的是WHERE语句是在GROUP BY语句求值之前进行数据过滤的。与GROUP BY语句一样,WHERE语句也不支持聚合函数。

4.返回所有分组

 

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

SELECT ZIP FROM Customers WHERE State = 'KY' GROUP BY ALL ZIP

 

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

SELECT ZIP, Count(ZIP) AS KYCustomersByZIP FROM Customers WHERE State = '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 Customers FROM Customers GROUP BY ZIP HAVING Count(ZIP) = 1

 

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

6.进一步了解WHEREHAVING语句

如果你对何时应该使用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

 

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

8.统计聚合数据

 

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

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

 

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

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表示左边的值是一个统计值,是ROLLUPCUBE的操作符。

 

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

分享到:
评论

相关推荐

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

    以下是对标题和描述中提到的10个新技巧的详细解释: 1. **使用ORDER BY进行排序**:ORDER BY语句是SQL中最基本的排序工具,可以根据一列或多列将结果集按升序(ASC)或降序(DESC)排列。例如,`SELECT * FROM table ...

    oracle分组排序统计高级用法

    ### Oracle 分组排序统计高级用法详解 #### 一、Oracle分组排序和统计概述 在Oracle数据库中,实现分组排序和统计是一项常见的需求,主要用于...希望本文能够帮助读者更好地理解和掌握Oracle中的高级排序和统计技巧。

    sql 分组,统计等常用语句

    根据给定文件中的标题、描述、标签以及部分内容,本文将详细介绍SQL中分组与统计相关的常用语句及其应用场景。这不仅包括基本的分组查询、条件筛选,还涉及到了更高级的功能,如聚合函数的使用、ROLLUP和CUBE的区别...

    SQL实验:使用分组,排序和聚合函数以及连接查询

    以上实验内容不仅涉及基本的SQL语句编写技巧,还涵盖了更为高级的SQL特性,如连接查询、聚合函数、排序等。这些技能对于数据库管理、数据分析师等职业至关重要,是学习SQL过程中不可或缺的一部分。

    常用的SQL排序、分组与统计的使用方法

    掌握这些SQL排序、分组和统计的技巧,将使你在处理大数据时更加得心应手,能够根据需求生成有意义的报告和分析。在实际应用中,结合使用这些方法可以实现复杂的数据分析任务,比如找出销售最高的产品类别,或者确定...

    数据库SQL操作技巧

    可以使用WHERE子句进行条件筛选,GROUP BY进行分组,HAVING过滤分组后的结果,ORDER BY进行排序,LIMIT或TOP限制返回的记录数量。 二、高级SQL操作 1. 联接查询:JOIN操作将两个或多个表的数据结合在一起,如INNER...

    SQL高级实例-模糊查询-分组随机查询-转换

    其次,**分组查询**是SQL中处理多行数据并进行统计分析的重要工具。`GROUP BY`语句允许我们根据一个或多个列对数据进行分组,然后使用聚合函数如`COUNT`、`SUM`、`AVG`、`MIN`和`MAX`来计算每组的总和、平均值等信息...

    如何分类、分组以及总计SQL数据

    在SQL中,对数据进行分类...通过熟练掌握这些概念和技巧,你可以有效地对SQL数据进行分类、分组和总计,从而进行深入的分析和决策支持。在实际应用中,结合业务需求灵活运用这些工具,将使你的SQL查询更加实用和高效。

    sql查询统计

    根据给定的信息,我们可以将这些内容归纳为一系列与SQL查询统计相关的知识点,下面将逐一进行详细解释。 ### SQL查询统计知识点 #### 1. 查询所有学生信息 ```sql SELECT * FROM 学生; ``` 这条SQL语句用于查询表`...

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

    1. **基础查询**:介绍如何使用SELECT语句进行基本的数据检索,包括选择特定列、过滤行、排序结果以及分组数据。 2. **联接操作**:讲解如何通过JOIN语句连接多个表,以获取跨表的数据信息,包括内连接、外连接和...

    新东方SQL培训教材

    **03单行函数.ppt、05分组函数.ppt**:这两部分将详细讲解SQL中的函数应用,包括单行函数(如COUNT(), MAX(), MIN())用于处理单个记录,以及分组函数(如GROUP BY, HAVING)用于对数据进行聚合操作,进行统计分析。...

    LINQ_TO_SQL_高级查询介绍

    LINQ to SQL 是 LINQ 的一个实现,专门用于与关系数据库进行交互。在本篇中,我们将深入探讨如何使用LINQ to SQL执行高级查询,特别是`Order By`和`Group By`操作。 **1. `Order By`操作** `Order By`操作用于对...

    SQLServer2005 中的几个统计技巧

    在SQL Server 2005中,数据统计是数据库管理员和开发人员经常面临的任务,它涉及到对大量数据进行分析和汇总。...通过灵活运用这些统计技巧,你可以更有效地管理和理解存储在SQL Server中的大量数据。

    SQL语句技巧:按月统计数据

    在SQL中,对数据进行按月统计是一种常见的需求,特别是在数据分析和报告生成中。这个问题的描述涉及到了如何从一个包含日期和数量的表格中提取每月的总和。表的结构非常简单,有两个字段:`qty`(数量)和`date`...

    SQL查询技巧(范例宝典)

     10.9 排序、分组统计 471  实例323 数据分组统计(单列) 471  实例324 在分组查询中使用ALL关键字 473  实例325 在分组查询中使用CUBE运算符 475  实例326 在分组查询中使用ROLLUP 477  实例...

    SQL查询语言及应用

    ### SQL查询语言及应用 #### 一、SQL简介 ...掌握SQL的基础知识和高级技巧对于从事数据相关工作的人员来说至关重要。通过对SQL的学习和实践,可以有效地管理和分析数据,提升工作效率和决策质量。

    SQL SERVER T-SQL

    - **排序与分组**:使用ORDER BY和GROUP BY子句对查询结果进行排序和分组,便于数据分析。 #### 四、高级查询技术 - **连接查询**:掌握不同类型的连接(INNER JOIN, LEFT JOIN, RIGHT JOIN等),以便从多个表中...

    数据分析实践 使用Excel和SQL进行数据分析 数据分析教程课件 数据分析实战课程 共94页.pdf

    本课程旨在教授如何使用Excel和SQL进行数据分析,覆盖了从基础知识到实战技巧的全面内容。 首先,课程介绍了数据分析的基础概念,包括其价值和前景。数据分析有助于企业发现潜在商机,通过数据可视化提升信息展示...

    sqlhacks100个业界最尖端的技巧和工具

    2. **数据排序与分组**:将介绍ORDER BY和GROUP BY子句的应用,如何进行数据排序,以及如何根据特定条件对数据进行分组,以便进行统计分析。 3. **聚合函数**:如COUNT、SUM、AVG、MIN和MAX等,它们用于对一组值...

Global site tag (gtag.js) - Google Analytics