首页 > 其他分享 >分组函数

分组函数

时间:2022-10-06 15:35:06浏览次数:46  
标签:group 函数 sal 分组 deptno where select

多行处理函数

  • 多行处理函数的特点:输入多行,最终输出一行
    • count 计数
    • sum 求和
    • avg 平均值
    • max 最大值
    • min 最小值
      注意:
      分组函数在使用的时候必须先进行分组,然后才能用
      如果你没有对数据进行分组,整张表默认为一组
    • 找出最高工资:
      select max(sal) from emp;
      分组函数在使用的时候需要注意哪些:
  • 第一点:分组函数自动忽略NULL,你不需要提前对NULL进行处理
  • 第二点:分组函数中count( * )和count(具体字段)有什么区别
    count(具体字段):表示统计该字段下所有补位NULL的元素的总数
    count( * ):统计表当中的总行数。(只要有一行数据count则++)
    因为每一行记录不可能都为NULL,一行数据中有一列不为NULL,则这行数据就是有效的
  • 第三点:分组函数不能够直接使用在where子句中
    • 找出比最低工资高的员工信息:
      select ename,sal from emp where sal>min(sal);//报错
      因为分组函数在使用的时候必须先分组之后才能使用
      where 执行的时候,还没有分组。所以where后面不能出现分组函数
  • 第四点:所有的分组函数可以组合起来一起用
    select sum(sal),avg(sal),max(sal),min(sal),count(*) from emp;
  • 分组查询
    • 什么是分组查询
      在实际的应用中,可能有这样的需求,需要先进行分组,然后对每一组的数据进行操作
      这个时候我们需要使用分组查询,怎么进行分组查询呢?
      select ... from ... group by ...
    • 计算每个部门的工资和?
    • 计算每个工作岗位的平均薪资?
    • 找出每个工作岗位的最高薪资?
  • 将之前的关键字全部组合在一起,来看一下他们的执行顺序
    select .. from .. group by .. order by ..
    以上关键字的顺序不能颠倒,需要记忆
    1.from
    2.where
    3.group by
    4.select
    5.order by
    • 找出每个工作岗位的工资和
      实现思路:按照工作岗位分组,然后对工资求和
      select job,sum(sal) from emp group by job;
      重点结论:
      在一条select语句当中,如果有group by语句的话,
      select后面只能跟:参加分组的字段,以及分组函数。其他的一律不能跟
  • 使用having可以对分完组之后的数据进行进一步过滤
    having不能单独使用,having不能代替where,having必须和group by联合使用
  • 找出每个部门的最高薪资
    按照部门编号分组,求每一组的最大值
    select deptno,max(sal) from emp group by deptno;
  • 找出每个部门不同岗位的最高薪资
    select deptno,job,max(sal) from emp group by deptno,job;
  • 找出每个部门的最高薪资,要求显示最高薪资大于3000的
    • 第一步:找出每个部门最高薪资
      select deptno,max(sal) from emp group by deptno;
    • 第二步:要求显示最高薪资大于3000的
      select deptno,max(sal) from emp group by deptno having max(sal) > 3000;
      思考一个问题:以上的SQL语句执行效率是不是低?
      实际上可以这样考虑:先将大于3000的都找出来,然后在分组
      select deptno,max(sal) from emp where sal > 3000 group by deptno;
      优化策略:where 和 having,优先选择where,where实在完成不了了,再选择having
  • where没办法的
    找出每个部门平均薪资,要求显示平均薪资高于2500的
    select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;

总结

select ... from ... where ...group by ... having ... order by ...
执行顺序:
1.from
2.where
3.group by
4.having
5.select
6.order by

  • 找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除MANAGER之外,要求按照平均薪资降序排
    select job,avg(sal) from emp where job !='MANAGER' group by job having avg(sal)>1500 order by avg(sal) desc;

标签:group,函数,sal,分组,deptno,where,select
From: https://www.cnblogs.com/song-hua/p/16757712.html

相关文章

  • SQL 标量函数-----日期函数 day() 、month()、year()
      selectday(createtime)fromlife_unite_product    --取时间字段的天值selectmonth(createtime)fromlife_unite_product  --取时间字段的月值selec......
  • JZOJ 7685. 【2022.10.06冲剌NOIP2022模拟】奇怪的函数(function)
    \(\text{Solution}\)观察到关于\(x\)的函数在\(n\)个操作之后一定是这样的:一段水平直线加上一段斜率为\(1\)的直线再加上一段水平直线于是线段树维护这个分段函数......
  • 2022牛客OI赛前集训营-提高组(第一场) 奇怪的函数 根号很好用
    奇怪的函数考虑暴力,每次查询\(O(n)\)扫所有操作,修改\(O(1)\)这启发我们平衡复杂度,考虑分块。观察题目性质,可以发现,经过若干次操作后得到的结果一定是一个关于\(x\)的分......
  • 网络字节序与主机字节序的转换函数实践
    1.什么是字节序字节序是处理器架构特性,用于指示像整数这样的大数据类型内部的字节如何排序。简单来说,就是指超过一个字节的数据类型在内存中的存储的顺序。那么很明显,像......
  • TCP与UDP的联系与区别,网络字节序与主机字节序的转换函数实践
     (1)TCP与UDP的联系与区别:TCP是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,一个TCP连接必须要经过三次“对话”才能建立起来。UDP是与TCP相对应的协......
  • mysql count函数
    1.count(1)andcount(字段)两者的主要区别是(1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录。(2) count(字段) 会统计该字段在表中出现的次数,忽略字段......
  • 1.3 基本语法_输入函数input
    age=input('你几岁了?')print(age)'''由计算机提问而得到的任何回答,统统为字符串str类型'''print(type(age))age=int(age)#类型转换"机"print(type(ag......
  • 数据处理函数
    数据处理函数(单行处理函数)单行处理函数的特点:一个输入对应一个输出和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应一个输出!)单行处理函数常见的有......
  • JavaScript回调函数
    在百度百科中,回调函数的定义就是一个被作为参数传递的函数。通俗地理解:我现在写一个函数,里面定义了函数A,那么函数A就是回调函数。以前我认为JavaScript不过是......
  • python一些函数库的安装
    python中如何安装libxml2?https://www.codenong.com/cs106853136/注意不是:pipinstalllibxml2而是pipinstalllxml 顺带了解其他python工具https://www.osgeo.cn/......