本系列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()聚合不重复的值。
对于SUM、AVG、COUNT,DISTINCT在计算总和、平均值或统计行数之前消除重复值。对于MIN和MAX,DISTINCT没有意义。
不能对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 的人都知道,使用聚合函数(AVG、SUM、COUNT、MIN/MAX 等)和分组操作(GROUP BY)可以对数据进行基本的统计分析,例如统计公司员工的人数、每个部门的平均月薪等。如果想要回顾这些基础概念,可以参考这...
模仿sqlserver数据库中的groupby分组数据,可直接在页面传入数据集合生成结果,,结果由console.log()输入,需要浏览器F12开发模式观看
客户提出需求,针对某一列分组加上小计,合计汇总。网上找了一些有关SQL加合计的语句。都不是很理想。决定自己动手写。思路有三个:1.很多用GROUPPING和ROLLUP来实现。 优点:实现代码简洁,要求对GROUPPING和...
通过sql语句实现分组小计功能,看看测试代码,认真分析
使用WITH ROLLUP:在group分组字段的基础上进行统计数据。 函数COALESCE(expression_1,…,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。 代码...
$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_
│ │ 9.1.3 访问外部数据源方法总结.sql │ │ 9.5.1 二进制文件存取示例(T-SQL).sql │ │ 9.5.1 二进制文件存取示例(VB&VBA).vbs │ │ a.txt │ │ Schema.ini │ │ │ └─其他 │ bcp-数据导入导出(全).sql ...
基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则...
sql server 2000 8和9课件:第8章 数据分组与汇总,第9章多表联接
第一章 SQL Server基础 ? ? 1、SQL 2008视频教程—SQL数据库连接 ? 2、SQL 2008视频教程-系统数据库 ? 3、SQL 2008视频教程-数据库创建 ? 4、SQL 2008视频教程-数据库创建2 ? 5、SQL 视频教程-对...
该套控件操作极其简单,使用极其灵活,...2、报表设计器:wydReport.exe3、查询条件建立控件: 可建立含SQL条件4、LuckJump1 数据功能扩张,含显示设置、数据查询、快速浏览、分组汇总、导出数据(.xls .htm .cvs .txt)
最后一篇是综合案例篇,分别使用.NET和Java语言实现了与SQL Server 2008的连接,并完成了图书管理系统和在线订餐系统。 第一篇 SQL Server 2008基础篇 第1章 学习数据库的准备 ( 教学视频:58分钟) 15 1.1 认识...
SQL 数据查询 [实验目的]: 熟练掌握条件查询、分组查询以及查询的排序; 灵活运用库函数及统计汇总查询; 掌握多表之间的等值连接与非等值连接、自身连接; 使用多种子查询进行查询。 [实验要求]: 利用实验...
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开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户...
GROUP BY子句通过设置分组条件来汇总数据,在第一个例子中,我在数据库AdventureWork2012中的表 Sales.SalesOrderDetail.中的一列上进行数据分组操作。这个例子以及其他例子都使用数据库AdventureWorks2012,如果你...
书中介绍了各种DBMS,关系模型理论,SQL语法,从表中检索 数据,操作符和函数,汇总和分组数据,联结,子查询,集合操作,创建 、更改和删除表,索引,视图,事务和SQL技巧等。本书比较了各种DBMS中 的SQL实现,并给...
Oracle监控数据库性能的SQL汇总 36 Oracle如何精确计算row的大小 38 PL/SQL编程 39 数据库的分组问题 41 oracle知识 42 数据库的导入导出 42 Oracle查询中rownum与Order by查询 45 oracle9i小结 46 Oracle 数据库的...
函数一般在数据上执行,它给数据的转换和处理提供了方便。不同的DBMS提供的函数不同。 函数可能会带来系统的不可移植性(可移植性:所编写的代码可以在多个系统上运行)。 加入注释是一个使用函数的好习惯。 大多数...