`

SQL基础总结(五):汇总和分组数据

 
阅读更多

本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)

-------------------------

只对单个值进行操作的是标量函数。

对一组值进行操作以产生一个汇总值的是SQL聚合函数或集合函数。

可以对行的集合进行聚合,这些行可以是:

1. 表中所有的行。

2. 那些由Group by子句创建的行。

3. 那些由where子句指定的行。

 

筛选组使用Having子句。没有聚合的查询一行接一行的处理,聚合查询将表作为整体,并从中构造新行。

 

除了count(*)以外,所有聚合函数都将忽略空值,count(expr)count(*)绝对不会返回空值,而是返回一个正整数或零。

 

如果集合中没有行或者只有包含的行,其它的聚合函数将返回空值。

聚合表达式不能出现在WHERE子句里。

不能在SELECT子句中混合使用非聚合表达式和聚合表达式。

对于分组列可以混合使用非聚合表达式和聚合表达式。

不可以嵌套聚合函数。

不可以在聚合表达式中使用子查询,AVG(SELECT …)是非法的。

 

使用MIN()查找最小值。

 

使用MAX()查找最大值。

 

使用SUM()计算总和。

 

使用AVG()计算平均值,即算数平均值,等于集合中量的总和除以集合中量的个数。

如果一行没有,则平均值是空值,而不是设想的零。

不应该在SQL或宿主语言中自己编写统计程序。

 

使用COUNT()统计行数。

COUNT(expr)返回expr不为空的行数。

COUNT(*)返回集合中全部行的个数,包括空值和重复值。

 

使用DISTINCT()聚合不重复的值。

对于SUMAVGCOUNTDISTINCT在计算总和、平均值或统计行数之前消除重复值。对于MINMAXDISTINCT没有意义。

不能对COUNT(*)使用DISTINCT,但是可以用COUNT(DISTINCT expr)统计非空行的个数。

 

GROUP BY子句位于WHERE子句之后、ORDER BY子句之前。分组列可以是列名或派生列。输入表中的列无法出现在聚合查询的SELECT子句中,除非它们也被包含在group by子句中。

 

如果分组列包含多个空值,空值将被放进一个分组中。分组包含多个空值并不意味着空值彼此相等。

 

在包含GROUP BY子句的查询中使用WHERE子句,在分组前消除行。

不能在GROUP BY子句中使用列别名。

 

出现在columns中的非聚合列也必须出现在grouping_columns中。

 

COUNT(expr)统计非空值,而COUNT(*)统计包括空值在内的所有值。GROUP BY认可空值,并且为其创建一个空值分组。

 

使用WHERE子句将不想分组的行排斥在外,使用HAVING子句在分组后筛选行。

 

GROUP BY查询中,一个聚合函数返回多个值被称为矢量聚合,在缺少GROUP BY子句的查询中,一个聚合函数返回单个值被称为标量聚合。

 

应该为经常分组的列创建索引。

 

WHERE查询条件在分组产生以前就被应用,而HAVING搜索条件在分组产生之后才被应用。在分组前使用WHERE可以减少分组后的行数,因此更高效。

 

除了HAVING可以包含聚合函数以外,HAVING语法类似于WHERE语法。

分享到:
评论

相关推荐

    SQL 数据分析:销售数据的小计/合计/总计以及数据透视表

    学习过 SQL 的人都知道,使用聚合函数(AVG、SUM、COUNT、MIN/MAX 等)和分组操作(GROUP BY)可以对数据进行基本的统计分析,例如统计公司员工的人数、每个部门的平均月薪等。如果想要回顾这些基础概念,可以参考这...

    仿sqlserver数据库分组汇总

    模仿sqlserver数据库中的groupby分组数据,可直接在页面传入数据集合生成结果,,结果由console.log()输入,需要浏览器F12开发模式观看

    用SQL实现统计报表中的小计与合计的方法详解

    客户提出需求,针对某一列分组加上小计,合计汇总。网上找了一些有关SQL加合计的语句。都不是很理想。决定自己动手写。思路有三个:1.很多用GROUPPING和ROLLUP来实现。 优点:实现代码简洁,要求对GROUPPING和...

    pb通过sql语句实现分组小计统计

    通过sql语句实现分组小计功能,看看测试代码,认真分析

    sql-显示供应商供应零件的汇总列表(with rollup+coalesce)

    使用WITH ROLLUP:在group分组字段的基础上进行统计数据。 函数COALESCE(expression_1,…,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。 代码...

    以数据库字段分组显示数据的sql语句(详细介绍)

    $sql = “select conf_id from `group` group by conf_id”;//$pre = $db->prepare($sql);//$result_arr = array();$pre = $db->query($sql);$result_arr = $pre->fetchAll(PDO::FETCH_ASSOC); //print_

    经典SQL脚本大全

    │ │ 9.1.3 访问外部数据源方法总结.sql │ │ 9.5.1 二进制文件存取示例(T-SQL).sql │ │ 9.5.1 二进制文件存取示例(VB&VBA).vbs │ │ a.txt │ │ Schema.ini │ │ │ └─其他 │ bcp-数据导入导出(全).sql ...

    Sqlserver2000经典脚本

    基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则...

    sql server 2000 第八和九章课件

    sql server 2000 8和9课件:第8章 数据分组与汇总,第9章多表联接

    SQLSserver2008 上

    第一章 SQL Server基础 ? ? 1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ? 5、SQL 视频教程-对...

    报表票据打印/建立SQL查询条件/数据功能扩张

    该套控件操作极其简单,使用极其灵活,...2、报表设计器:wydReport.exe3、查询条件建立控件: 可建立含SQL条件4、LuckJump1 数据功能扩张,含显示设置、数据查询、快速浏览、分组汇总、导出数据(.xls .htm .cvs .txt)

    21天学会SQL

    最后一篇是综合案例篇,分别使用.NET和Java语言实现了与SQL Server 2008的连接,并完成了图书管理系统和在线订餐系统。 第一篇 SQL Server 2008基础篇 第1章 学习数据库的准备 ( 教学视频:58分钟) 15 1.1 认识...

    数据库实验报告SQL 数据查询(详细版有截图的)

    SQL 数据查询 [实验目的]: 熟练掌握条件查询、分组查询以及查询的排序; 灵活运用库函数及统计汇总查询; 掌握多表之间的等值连接与非等值连接、自身连接; 使用多种子查询进行查询。 [实验要求]: 利用实验...

    程序员的SQL金典.rar

     4.1.5 数据汇总  4.1.6 排序  4.2 高级数据过滤  4.2.1 通配符过滤  4.2.2 空值检测  4.2.3 反义运算符  4.2.4 多值检测  4.2.5 范围值检测  4.2.6 低效的“WHERE 1=1”  4.3 数据分组  4.3.1 数据分组...

    SQL SERVER 2000开发与管理应用实例

    本书全面系统地介绍了SQL Server开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户...

    SQL Server数据汇总五招轻松搞定

    GROUP BY子句通过设置分组条件来汇总数据,在第一个例子中,我在数据库AdventureWork2012中的表 Sales.SalesOrderDetail.中的一列上进行数据分组操作。这个例子以及其他例子都使用数据库AdventureWorks2012,如果你...

    SQL查询语句

    书中介绍了各种DBMS,关系模型理论,SQL语法,从表中检索 数据,操作符和函数,汇总和分组数据,联结,子查询,集合操作,创建 、更改和删除表,索引,视图,事务和SQL技巧等。本书比较了各种DBMS中 的SQL实现,并给...

    高性能动态SQL Oracle数据安全 Oracle 数据库的聚簇技术 等等

    Oracle监控数据库性能的SQL汇总 36 Oracle如何精确计算row的大小 38 PL/SQL编程 39 数据库的分组问题 41 oracle知识 42 数据库的导入导出 42 Oracle查询中rownum与Order by查询 45 oracle9i小结 46 Oracle 数据库的...

    2009达内SQL学习笔记

    函数一般在数据上执行,它给数据的转换和处理提供了方便。不同的DBMS提供的函数不同。 函数可能会带来系统的不可移植性(可移植性:所编写的代码可以在多个系统上运行)。 加入注释是一个使用函数的好习惯。 大多数...

Global site tag (gtag.js) - Google Analytics