网站首页 > 基础教程 正文
1、group by:按照某个字段或者某些字段进行分组。
2、having:对分组之后的数据再次进行过滤。
3、分组函数一般都会和group by联合使用。
4、当一条sql语句没有group by的时候,整张表的数据会自成一组数据。
5、当一条sql语句中有group by的时候,select后面只可以跟 参与分组的字段和分组函数。
6、
现在有一张员工信息表如下:
1)找出每个工作岗位的最高薪资。
select job, max(sal) as sal from emp group by job;
2)查询薪资高于平均薪资的员工
select ename ,sal from emp where sal > avg(sal);
估计很多人都会写成上面的sql语句,上面的错误提示是:错误的使用分组函数。这里有一条重要的结论:分组函数不可以直接使用在where后面。
原因:分组函数是在group by后面执行,group by又在where后面执行,所以where后面不可以直接使用分组函数。
sql语句的执行顺序:
1、from
2、where
3、group by
4、having
5、select
6、order by
所以sql语句可以这样写:select ename ,sal from emp where sal > (select avg(sal) from emp);
3)找出每个工作岗位的平均薪资
select job , avg(sal) from emp group by job;
4)找出每个部门不同工作岗位的最高薪资(多个字段进行分组查询)
select deptno ,job,max(sal) from emp group by deptno,job;
二:having和where的使用
1)查询每个部门的最高薪资,并且展示只大于2900的
select deptno , max(sal) from emp group by deptno having max(sal) > 2900;
使用having我们可以查询需要的结果,但是不建议这样使用,因为效率不高。
原因:我们是将所有的数据进行了分组,然后在所有的数据里面查找了薪资最高的,最后去除了低于2900的。我们不如直接使用where将低于2900的直接去除,这样就不用将低于2900的数据在进行分组和去查找最高薪资了。
select deptno,max(sal) from emp where sal > 2900 group by deptno;
结果都是一样的,但是使用where的效率要高于having。
这里有很重要的一条提高sql效率的总结:能在前面提前过滤的数据,就要提前过滤掉,不要再最后再进行过滤。将无用的数据进行查询比较会降低sql的效率。
猜你喜欢
- 2025-01-01 数据库:JDBC详解
- 2025-01-01 Node-RED系列(五):Node-RED序列节点的使用
- 2025-01-01 sqlserver开窗及去重row_number() over(partition by c1 order by c2)
- 2025-01-01 数据库基础篇(二)——SQL之数据查询
- 2025-01-01 面试官问:select * from for update会锁表还是锁行?教你回答!
- 2025-01-01 SQLServer 日期函数大全
- 2025-01-01 Python爬虫快速入门,BeautifulSoup基本使用及实践
- 2025-01-01 SQL轻松入门(5):窗口函数
- 2025-01-01 太厉害了,只需一条DOS命令,就可以找到windows10许可证密钥
- 2025-01-01 面试官:谈谈你对mysql联合索引的认识?
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)