距离上一篇时间隔得蛮久了,这篇继续查询,简单总结一下聚合函数、分组的知识。

一、聚合函数(组函数/多行函数)

何谓多行函数,顾名思义就是函数作用于多行数据得出一个输出结果,什么意思呢?看图:

那么常用的有哪些这样的函数呢?

AVG(平均值)

SUM(合计)

COUNT(计数)

MAX(最大值)

MIN(最小值)

STDDEV(标准差)

组函数使用的语法,用法很简单,但有两点要注意:

I. 函数参数类型

  1. 对数值型数据使用AVG和SUM函数
  2. 对任意数据类型的数据使用MIN、MAX、COUNT函数

II. 有关空值的处理

  1. 首先组函数是忽略空值的,例如COUNT(*)返回的是表中所有的记录数,而COUNT(expr)返回的是expr字段不为空的记录数
  2. 那么怎样来处理空值呢,就要用到上一篇中提到的NVL函数,SELECT AVG(NVL(commission_pct,0)) FROM employees
  3. DISTINCT关键字表达的非空且不重复,COUNT(DISTINCT expr)返回的expr非空且不重复的记录数

III. 不能在WHERE子句中使用组函数,这点结合后面的HAVING子句解释。

IV. 组函数可以嵌套使用

二、数据分组

GROUP BY子句,分组数据

意思咱就不废话了,用的时候注意两点:

  • SELECT后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY后面,反过来包含在GROUP BY子句的中的列却不必包含在SELECT列表中。
  • GROUP BY子句可以包含多个列,同意也适用规则1。

有点晕,什么意思呢?我来解释一下,判断一个sql语句是否合法其实可以试着去理解你要写的sql语句要表达的实际想法,例如:

  • select department_id,job_id,avg(salary)
    from employees
    group by department_id,job_id

如上语句,我想要表达的意思是:从雇员这张表中求出不同部门和不同工种的人的平均工资,输出的格式是按照SELECT语句列表。那么如果我从SELECT列表中随便删掉一个字段,改变的只是我输出的格式,我还是按部门和工种进行分类了;但是如果只从GROUP

BY子句中删掉job_id,则语句表达的意思就不能成立了,我按部门进行分组,但是部门中有很多个工种,结果到底要怎样对应不得而知。

HAVING子句,过滤分组

  • WHERE子句的作用是筛选满足条件的数据行,即在分组之前过滤数据,条件中不能使用聚合函数;使用WHERE条件显示特定的行;
  • HAVING子句的作用是筛选满足条件的组,即在分组之后过滤分组,条件中经常包含聚合函数;使用HAVING条件显示特定的分组;

[SQL入门级] 接上篇,继续查询的更多相关文章

  1. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  2. 你真的会玩SQL吗?之逻辑查询处理阶段

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  3. SQL Server-聚焦强制索引查询条件和Columnstore Index(九)

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解,Always to review the basics. 强制索引查询条件 前面我们也讲了一点强制索引查询的知 ...

  4. SQL Server2016 新功能实时查询统计信息

    SQL Server2016 新功能实时查询统计信息 很多时候有这样的场景,开发抱怨DBA没有调优好数据库,DBA抱怨开发写的程序代码差,因此,DBA和开发都成为了死对头,无法真正排查问题. DBA只 ...

  5. SQL的多表连接查询

    SQL的多表连接查询 多表连接查询具有两种规范,SQL92和SQL99规范. SQL92规范支持下列多表连接查询: (1)等值连接: (2)非等值连接: (3)外连接: (4)广义笛卡尔积: SQL9 ...

  6. 第1/24周 SQL Server 如何执行一个查询

    大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要, ...

  7. 在SQL Server 2016里使用查询存储进行性能调优

    作为一个DBA,排除SQL Server问题是我们的职责之一,每个月都有很多人给我们带来各种不能解释却要解决的性能问题. 我就多次听到,以前的SQL Server的性能问题都还好且在正常范围内,但现在 ...

  8. SQL总结(七)查询实战

    SQL总结(七)查询实战 一.场景 给定一个场景,学生选课系统为例,大家很熟悉. 主要关系: 学生(学号.姓名.年龄.性别) 教师(教师ID,教师姓名) 课程(课程ID,课程名称,任教教师ID) 成绩 ...

  9. Sql Server来龙去脉系列之三 查询过程跟踪

    我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更 ...

随机推荐

  1. Web.xml各版本模版

    web.xml v2.3 web.xml v2.4 <?xml version="1.0" encoding="UTF-8"?> <web-a ...

  2. Vuforia判断当识别追踪的对象

    方法一,如果有多个识别对象,在Update中循环识别对象数组,获取TrackableBehaviour组件 foreach (var item in trackObjects) { var mTrac ...

  3. 浏览器版本不支持页面示例 supper.html

    关键点在于<html>标签和js.<!--[if lt IE 10]>的配合 使用360浏览器兼容模式下查看:http://runjs.cn/code <!DOCTYPE ...

  4. css解决div的各种浏览器兼容性问题

    方法一: min-height:500px;/*解决ie8.9.ff.chromet*/ height:100%;/*解决ie6.7*/ _height:500px;/*解决ie6超出自动溢出*/ 方 ...

  5. 在Windows下使用Git

    关于Git git是当今最流行的版本控制系统,因为是诞生在Linux操作系统下,因此Linux对git天生有最好的支持,但好在各路大牛的努力下,目前在Windows也能较为完美的使用.以下便是我使用g ...

  6. Grandle全局变量定义及引用

    在Project的build.gradle脚本中定义一些全局变量 ext { compileSdkVersion = 21 buildToolsVersion = "24.0.1" ...

  7. PARALLEL PROCESSING

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION

  8. c# TimeSpan

    转自:http://blog.163.com/y_p_xu/blog/static/17085710220116472030543/ /// <summary>        /// 将时 ...

  9. python2.7安装PIL.Image模块

    这是大家常用的两种安装方法 sudo pip install PIL pip install PIL --allow-external PIL --allow-unverified PIL 如果安装成 ...

  10. Libgdx 循环绘制图片时间隔的问题

    在libgdx中使用循环绘制一张图片铺满某个区域时,有可能会遇到像素计算没有问题时,图块中间还是有约1像素的间隔,或者是本来没有间隔,做了缩放处理之后发现中间有间隔. 解法 当使用Texture加载图 ...