数据库学习记录(二)

1.count(*)和count(具体的某个字段),他们有什么区别?

count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关)

count(comm):表示统计comm字段中不为NULL的数据总数。

分组函数也能组合起来用:

select count (*),sum(sal),avg(sal),max(sal),min(sal) from emp;

2.group by 和 having

group by: 按照某个字段或者某个字段进行分组

having: having是对分组之后的数据进行再次过滤。

案例:找出每个工作岗位的最高薪资。

select max(sal) from emp group by job;

注意:分组函数一般都会和group by联合使用,这也是为什么它被称为分组函数的原因。

并且任何一个分组函数(count sum avg max min)都是在 group by语句执行结束之后才会执行的。

当一条SQL语句没有group by的话,整张表的数据会自成一组。

select ename,sal from emp where sal>avg(sal);//ERROR 1111(HY000):Invalid use of group function

思考以上的错误信息:无效的使用了分组函数?

原因:SQL语句中有一个语法规则,分组函数不可直接使用在where子句中。

怎么解释?

因为group by是在where执行之后才会执行的。

还没有分组!!!!

select 5

from 1

where 2

group by 3

having 4

order by 6

所以应该先查询然后用查询到的数据,例如select ename,sal from emp where sal>(select avg(sal) from emp);

案例:找出每个工作岗位的最高薪资。

select max(sal),job from emp group by job;

select ename max(sal),job from emp group by job;//oracle会报错,mysql可以执行但是毫无意义。oracle的语法比MYSQL语法严谨。

切记!!!

当一条语句中有group by的时候,select后面只能跟分组函数和参与分组的字段。

每个岗位的平均薪资?

select job,avg(sal) from emp group by job;

多个字段能不能联合起来一块分组?

案例: 找出每个部分不同工作岗位的最高薪资

select

deptno,job,max(sal)

from

emp

group by

deptno,job;

找出每个部分的最高薪资,要求显示薪资大于2900的数据。

第一步:找出每个部门的最高薪资

select max(sal),deptno from emp group by deptno

第二步:找出薪资大于2900的

select max(sal),deptno from emp group by deptno having max(sal)>2900;//这种效率低!!!

用以下这种,效率高!!

select max(sal),deptno from emp where sal>2900 group by deptno;//效率高,如果能使用where过滤尽量用where

找出每个部门的平均薪资,要求显示薪资大于2000的数据。

第一步:找出每个部门的平均薪资

select avg(sal),deptno from emp group by deptno;

第二步:要求显示薪资大于2000的数据

select avg(sal),deptno from emp group by deptno having avg(sal) > 2000;

如果使用where筛选会报错, 无效的使用了分组函数。

切记,很重要。这种情况只能使用having过滤

Original: https://www.cnblogs.com/whiplash/p/16007866.html
Author: 小熊冰淇淋
Title: 数据库学习记录(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580620/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 商品批次号解析工具类

    背景:商品的批次号规则为恒定为八位日期数字”yyyyMMdd”,如”20200520″,代表着该商品是2020年05月20日生产的,…

    Java 2023年6月8日
    086
  • springboot + mybatis + 多数据源

    此文已由作者赵计刚薪授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源。 代码结构…

    Java 2023年5月30日
    0165
  • 14、线程同步机制

    线程同步机制 1、同一个进程的多个线程共享同一块存储空间,带来了方便,也有冲突,为了保证数据在方法中被访问的正确性,在访问时加锁机制,synchronized,当一个线程获得对象的…

    Java 2023年6月8日
    072
  • 编写程序,使用递归方法,实现统计项目目录下有多个java文件,共有多少行代码

    import java.io.File; import java.io.FileInputStream; /** * @author Mxhlin * @Email fuhua27…

    Java 2023年6月7日
    056
  • 若依框架,导出功能

    若依框架 ,导出功能完善,前后台代码 开发过程中发现一个bug,就是关于导出功能的前端直接使用$.table.exportExcel(),发现有一个bug,就是选中一个人,导出的居…

    Java 2023年6月5日
    098
  • 对注解的学习

    @Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类红的另一个方法的声明 @Deprecated:定义在java….

    Java 2023年6月14日
    093
  • java线程池

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建…

    Java 2023年5月29日
    093
  • 由于 ASP.NET 进程标识对全局程序集缓存没有读权限,因此未能执行请求。错误: 0x80131902

    分类: c#2013-06-17 10:22 89人阅读 评论(0) 收藏 举报 ASP.NET 由于 ASP.NET 进程标识对全局程序集缓存没有读权限,因此未能执行请求。错误:…

    Java 2023年6月14日
    079
  • Springboot整合二 集成 rabbitmq

    1、在application.yml文件中进行RabbitMQ的相关配置先上代码 spring: rabbitmq: host: 192168.21.11 port: 5672 u…

    Java 2023年5月30日
    081
  • JAVA8新特性–集合流操作Stream

    Stream类全路径为:java.util.stream.Stream对Stream的描述,引用其他文章中觉得比较好的介绍: Java 8 中的 Stream 是对集合(Colle…

    Java 2023年5月29日
    072
  • [Kafka]Kafka学习 — 初识Kafka

    Kafka学习 — 初识Kafka 参考资料:稀土掘金《图解 Kafka之实战指南》https://juejin.cn/book/6844733793220165639…

    Java 2023年6月5日
    078
  • 高可用架构(下)

    上次说到了理论,接口层面,数据库层面如何实现高可用,但是,这远远是不够得。为了面对更大的灾害,如:洪水,地震等,还要在机房层面做出高可用。当然,也不仅仅是为了面对自然灾害,也可以是…

    Java 2023年6月15日
    073
  • 本地项目推送到远程仓库(原来可以这么玩)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 方式一:在idea中将项目推送至远程仓库 注:此处远程仓库以码云为例 第一步:登录码云,进入个人主页 点击个人头像…

    Java 2023年6月5日
    097
  • 进程与线程的区别:最浅显易懂的解释

    作者丨阮一峰 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 进程(process)和线程(th…

    Java 2023年5月30日
    067
  • 2022-8-19 第六组 JDBC(2)

    PreparedStatement:执行sql的对象 1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题 1. &#x8F93…

    Java 2023年6月13日
    091
  • 设计模式 20 观察者模式

    观察者模式(Observer Pattern)属于 行为型模式 在 Java 中,一个对象的状态发生改变,就可能会影响到其他的对象,与之相关的对象可能也会联动的进行改变。 比如监听…

    Java 2023年6月6日
    0105
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球