SQL 数据库 学习 028 查询-11 having --- 对分组之后的信息进行过滤
2016-10-19 02:05
585 查看
我的电脑系统:Windows 10 64位
SQL Server 软件版本: SQL Server 2014 Express
本篇博客里面使用了
加入别名。
正确的指令:
如果参数的顺序变化了,执行的时候会不会受到影响?执行下面的指令,你就会知道答案。
总结: 所有
相同: 都是对数据过滤,只保留有效的数据。
不同:
总结
如果没有使用
尽管
就是上面说的:
请访问:http://www.aobosir.com/
SQL Server 软件版本: SQL Server 2014 Express
本篇博客里面使用了
scott库,如何你现在还没有添加这个库到你的服务器里面,请在查看本篇博客前,访问这篇博文来在你的服务器里面附加
scott库。
having
— 对分组之后的信息进行过滤
--输出部门平均工资大于2000的部门的部门编号,部门的平均工资 select deptno, avg(sal) from emp group by deptno having avg(sal)>2000;
加入别名。
--判断下列sql语句是否正确 select deptno, avg(sal) as "平均工资" from emp group by deptno having avg(sal) > 2000
--error select deptno, avg(sal) as "平均工资" from emp group by deptno having "平均工资" > 2000
正确的指令:
select deptno, avg(sal) from emp where ename not like '%A%' group by deptno having avg(sal) > 2000
--以部门编号分组后,显示组内元组大于3个元组的部门编号和平均工资 select deptno, avg(sal) as "平均工资" from emp group by deptno having count(*) > 3
--error select deptno, avg(sal) as "平均工资" from emp group by deptno having ename like '%A%'
select deptno, avg(sal) as "平均工资" from emp group by deptno having deptno>1
having
和 where
的异同
--把姓名不包含`A`的所有的员工按部门编号分组,
--统计输出部门平均工资大于2000的部门的部门编号、部门的平均工资
select deptno, avg(sal) from emp where ename not like '%A%' group by deptno having avg(sal) > 2000
--把工资大于2000, --统计输出部门平均工资大于3000的部门的部门编号、部门的平均工资、部门人数、部门最高工资 select deptno, avg(sal) "平均工资", count(*) "部门人数", max(sal) "部门最高工资" from emp where sal > 2000 --where是对原始的记录过滤 group by deptno having avg(sal) > 3000 --对分组之后的记录过滤
如果参数的顺序变化了,执行的时候会不会受到影响?执行下面的指令,你就会知道答案。
--error select deptno, avg(sal) "平均工资", count(*) "部门人数", max(sal) "部门最高工资" from emp group by deptno having avg(sal) > 3000 where sal > 2000
总结: 所有
select的参数的顺序是不允许变化的(所有的参数的位置都是固定的,你可以省略某个参数,但是不能变。),否则编译时出错。
having和
where的异同:
相同: 都是对数据过滤,只保留有效的数据。
where和
having一样,都不允许出现字段的别名,只允许出现最原始的字段的名字。
--error where子句不应该出现聚合函数 select deptno, avg(sal) from emp where avg(sal) > 2000 --error 因为where是对原始的数据过滤,不能使用聚合函数
不同:
where是对原始的记录过滤,
having是对分组之后的记录过滤。
where必须得写在
having的前面,顺序不可颠倒,否则运行出错。
总结 having
的用法
having子句是用来对分组之后的数据进行过滤。因此使用
having时通常都会先使用
group by。
如果没有使用
group by,而使用了
having,则意味着
having把所有的记录当做一组来进行过滤。
select count(*) from emp having avg(sal) > 1000
having子句出现的字段必须得是分组之后的组的整体信息。
having子句不允许出现组内的详细信息。
--error select deptno avg(sal) as "平均工资", job from emp group by deptno
--OK select deptno avg(sal) as "平均工资", count(*) as "部门人数" from emp group by deptno
尽管
select字段中可以出现别名。但是
having子句中不能出现字段的别名,只能使用字段最原始的名字。(原因不得而知。)
就是上面说的:
having和
where的异同 。(这里不重复说明了。)
请访问:http://www.aobosir.com/
相关文章推荐
- 在数据库中 如何进行分类分组并总计SQL信息(转载)
- SQL 数据库 学习 026 查询-09 聚合函数 --- 多行记录返回至一个值,通常用于统计分组的信息
- SQL 数据库 学习 027 查询-10 group by --- 以某字段分组
- 数据库中Having放在分组函数group by后过滤查询组
- SQL查询刚開始学习的人指南读书笔记(一)关系数据库和SQL介绍
- sql 查询目标数据库中所有的表以其关键信息
- JavaEE学习11--数据库语言SQL
- Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
- 数据库排名sql,group by 分组查询按照时间最大值
- 数据库-使用查询到的不同字段的两条SQL的结果进行筛选查询
- 【SQL】分组数据,过滤分组-group by , having
- 【SQL】查询数据库中某个字段有重复值出现的信息
- 写一条SQL查询出每门科目的最高分,按照科目进行分组
- spark学习-SparkSQL--11-scala版写的SparkSQL程序读取Hbase表注册成表SQL查询
- sqlserver中分组查询,条件过滤,排序,写这个sql,我为自己感到骄傲
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- sql数据分组,过滤分组,group,having,排序
- 人才信息管理数据库 sql查询