数据库知识整理<六>

聚合函数与分组



6.1使用聚合函数进行数据统计:

  聚合函数常见的有以下几种:

  • count:返回该结果集中行的数目。
  • sum:返回结果集中所有值的总和。
  • avg:返回结果集中所有值的平均值。
  • max:返回结果集中所有值得最大值。
  • min:返回结果集中所有值的最小值。
  1. 执行行和列的计数:select count(<计数规范>) as <别名> from <表名>;其中技术规范的关键字有*、all、distinct。‘*’包括所有行包括空值null,‘all’计数所指定的列的所有非空值行,如果在都不带关键字的情况下默认此操作。‘distinct’计数指定列所有唯一非空值行。
  2. 返回列合计值:select sum(<计数规范>) as <别名> from <表名>;此函数与count函数唯一使用不同在于,sum不能使用通配符‘*’,其他使用基本一样。
  3. 获取平均值:select avg(<计数规范>) as <别名> from <表名>;使用all和distinct时,null值被忽略掉。
  4. 返回最大最小值:select max(<最大值规范>) from 表;select min(<最小值规范>) from 表;都是可以加上别名的。

6.2数据分组:

  SQL提供的一种技术,将表中的行分组,然后在每个组上应用聚合函数,这种分组技术与聚合函数一起使用,功能尤为强大。

  1. 过滤分组数据: select 列A,聚合函数(聚合函数规范) from 表名 where 过滤条件 group by 列A;例如对表instant数据库输入并执行SQL语句—select studentId ,count(*) AS highPasses from studentExam where mark >70 group by studentId;此语句执行的方式为,先将考试分数小于等于70的先过滤掉,然后再将具有相同的studentId列值的行分组在一起,最后执行count函数,计算余下的行中每个学生通过考试的次数 。
  2. 使用having子句:
    假设我们不想通过数据表中的实际值,而是通过聚合函数的结果来过滤查询结果集。例如我们要查询那些成绩特别好的或者特别差的,我们想基于平均分来查询,这时我们就可以使用having 子句来实现了,将它放在group by 子句之后,其形式为:having 过滤条件。例如:我们想要查询出考试成绩平均分大于70或者小于50的学生名单。select studentId,avg(mark) as AvgMark from stiudentExam group by studentId having avg(mark) < 50 or avg(mark)>70;

6.3Sql语句的执行顺序:

  学过的子句有:

  • select子句
  • from子句
  • where子句
  • group by 子句
  • order by 子句
  • having 子句

执行顺序是:

  1. 首先是执行from子句
  2. 再执行where过滤
  3. 有分组的话就执行group by
  4. 为每个组计算select祖居聚合函数的值,并为每组生成查询结果中的一行。
  5. 如果有having子句,则根据having子句在过滤,分组计算聚合计算的结果再次过滤。
  6. 如果有order by子句中,则根据order by子句中的列,对结果集进行排序。

总结:聚合函数的使用可谓是向一个工具一样,重要性不言而喻。学会使用集合函数其功能是相当强大,相当优雅。Sql语句的执行顺序也是会被考察到的,也要注意区别掌握。

时间: 2024-08-07 04:12:50

数据库知识整理<六>的相关文章

数据库知识整理

关系型数据库知识整理: 一,关系型数据库管理系统简介: 1.1使用数据库的原因: 降低存储数据的冗余度 提高数据的一致性 可以建立数据库所遵循的标准 储存数据可以共享 便于维护数据的完整性 能够实现数据的安全性 1.2基本概念: 对于任何数据库来说,表之间的关联关系存在三种基本的关系类型:一对一,一对多,多对多仅此三种. 目前流行的关系型数据库服务器管理系统有:微软-MS SQL Server.甲骨文-Oracle.IBM-DB2.开源的MySql和PostgreSQL等.(在面试中有被问到过)

数据库知识整理&lt;二&gt;

又继续写的博客,希望自己能坚持每天写博客.分享自己的点滴,对自己成长有帮助.今天下午高强度打了三个小时篮球,小腿都抽筋了.很爽,失落的心情似乎变得开明了一些.想到了一句话:“像SB式的坚持总会有好的收获”,因为坚定了目标,不达目标不罢休.其他的就没什么了.好吧,不多说这些了.继续数据库知识总结吧. 二,管理数据库和表: 2.1管理数据库: 创建和使用数据库: 创建数据库的SQL语句:create database 数据库名: 需要注意的是:数据库名在服务器中必须是唯一的并且遵循合法的标识符规则:

数据库知识整理&lt;八&gt;

联接: 8.1理解简单的单联接: 基本上联接的结果是每个集合的笛卡尔积.例如:两个集合{a,b,c}和{a,b}的笛卡尔积是如下的成对集合:{(a,a),(a,b),(b,a),(b,b),(c,a),(c,b)}. select 表1.列1,表1.列2,表2.列3 from 表1 cross join 表2: 这种类型的联接称为交叉联接,或者笛卡尔积.在mysql中查询语句就是这样写的. 8.1.1使用两表相等联接: 两个表的行相连接的最常用的方法是通过一个相等联接.相等联接基于每行中的一个列

数据库知识整理&lt;五&gt;

简单的数据查询: 5.1查询的基本结构: Sql语句:select [distinct] (* | column [alias],...) from table [where condition] [order bycolumn]; 5.2投影操作: 投影操作是指在Sql查询中,使用select子句,选择将对表中的那些列进行操作,这些列将出现在结果中. 基本的Sql语句的查询:select 列名列表 from 表名; 表名前缀:select 表名.列明 from 表名;如 select stud

数据库知识整理&lt;三&gt;

保证数据的完整性: 3.1数据完整性概述: 数据完整性的意义:我们知道数据库能防止储存垃圾数据,RDBMS实现该功能主要是通过维护数据完整性来实现的.根据数据完整性实施方法我们将其分为四类:实体完整性.域完整性.引用完整性.自定义的完整性. 实体完整性:一个表中的一行和它代表的一行完全一致,那么我们就说该表具有完整性. 域完整性:指给定列的输入有效性,如:限制类型(通过数据类型).格式(检查约束).可能值(外简约束.检查约束.默认值定义.非空约束). 引用完整性:实体与实体之间的联系在表中用外键

数据库知识整理&lt;四&gt;

使用DML语句更改数据: 所谓DML语句是指数据库操作语句,其中包括的是对数据库数据的修改.删除.插入. 4.1添加新数据: 插入单行的记录:基本的SQL语句为-insert into <表明>(<列明列表>) values (<值列表>);插入多行记录时中间用逗号隔开. 还有一种插入方式就是插入其他表的数据时,我们可以使用:insert into <表明>(<列明列表>) select <select语句>;如:insert int

SQL Server 2008常用的数据库知识整理

数据库知识点: 一.计算字段 1.NULLIF函数 将 null 的姓名转化为“佚名”: 表达式:NULLIF ( expression1 , expression2 )    含义:如果两个表达式不等价, 则 NULLIF 返回第一个 expression1的值.         如果两个表达式等价, 则 NULLIF 返回第一个 expression1类型的空值. 2.Beween And 计算字段 如:Fsalary Between Fage*1.5+2000 And Fage*1.8+5

数据库知识整理&lt;七&gt;

组合查询: 7.1使用子查询: 嵌套在其他查询中的查询,我们称之为子查询.子查询本身也可能包含一个子查询.子查询也称为内部查询,而包含子查询的语句也称为外部查询. 所有的子查询可以被分为两个类别:子查询和非相关子查询. 非相关子查询是独立于外部查询的子查询.子查询总共执行一次,执行完毕后将值传递给外部查询. 相关子查询的执行依赖于外部查询的数据,外部查询返回一行,子查询就执行一次. 子查询作为计算列:子查询的一个最简单的形式就是内部查询为外部查询的每行返回一个单值结果,他通常作为一个结果插入到一

计算数据库中各个表的数据量和每行记录所占用空间--添加架构信息-读后感及知识整理

参考文章: SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 监控SQLServer 数据库表每天的空间变化情况 仔细拜读上面三位的文章,不会的知识点又参考了MSDN,巩固了知识点如下: 知识点: 1.表的架构信息,涉及的系统对象 sys.schemas 和 INFORMATION_SCHEMA.TABLES,但后者不是官方推荐方式,