• Oracle分组查询


    分组查询


    分组函数 :group by 要分组的列名 对数据集合处理的函数,可以处理多行数据
    --5个分组函数
    --count --计数函数,用于数量的统计
    --sum 求和函数,对数据进行求和
    --avg 求评平均,对一组数据求平均值
    --min ,求最小值
    --max ,求最大值
    --分组函数,也叫统计函数,一般也做数据统计使用

    例子:
    --查询出10部门的最高工资和最低工资,平均工资;
    select max(sal) ,min(sal) ,avg(sal) from emp where deptno=10;
    --查询出入职日期在1981年6月后的员工数量,及平均工资
    select count(*) ,avg(sal) from emp where to_char(hiredate,'yyyy-mm') >= '1981-06';
    select count(*),avg(sal) from emp where hiredate>=to_date('1981-06','yyyy-mm');
    --查询出公司每月的工资支出是多少
    select sum(sal) from emp;
    --公司员工普提工资上调50%,查询公司上调工资前后,每月工资支出
    select sum(sal),sum(sal+(sal*0.5)) from emp;

    1. select 语句的执行顺序:
    from -> where -> group by -> having -> select - order by
    – 1.通过FROM子句中找到需要查询的表;
    – 2.通过WHERE子句进行非分组函数筛选判断;
    – 3.通过GROUP BY子句完成分组操作;
    – 4.通过HAVING子句完成组函数筛选判断;
    – 5.通过SELECT子句选择显示的列或表达式及组函数;
    – 6.通过ORDER BY子句进行排序操作。
    例子:查询出入职日期在1981年2月后的员工信息,并按照部门进行分组,查询出每个部门的平均工资,并且平均工资在2600以上 ,按照平均工资进行倒序排序
    select deptno, avg(sal) avgsal
    from emp
    where hiredate >= to_date('1981-02', 'yyyy-mm')
    group by deptno
    having avg(sal) > 2500
    order by avg(sal) desc;

    2. 联合主键
    例子:按入职年份和部门进行统计,查询出各部门各入职年份的最高工资和最低工资,多列统计
    理解:就是按照入职年份,部门进行分组
    select to_char(hiredate,'yyyy'),deptno,max(sal),min(sal) from emp group by to_char(hiredate,'yyyy'),deptno;

    3. 主函数中的distinct函数
    1)DISTINCT会消除重复记录后再使用组函数
    --理解distinct 关键与组函数的组合使用,用于何种场合
    例如:统计员工所在的部门的数量
    select count(deptno),count(distinct deptno) from emp;
    2)遇到有null空值数据时,可以组合单行函数进行使用
    例如:统计员工的平均奖金,没有奖金看为0
    select count(*),count(comm),avg(comm),avg(nvl(comm,0)) from emp;

    分组查询时注意:
    1.带group by的分组查询,执行顺序是先分组group by 后查询 select,即,写在select 后面的列,必须是分组列,或 组函数
    2.where条件中不能直接使用组函数
    3.分组数据可以使用having字句进行过滤
    4.分组列可以不在select子句中显示,select 列中要显示的列,必须出现在group by 分组中(在select 子句中非组函数列,都必须添加到group by 中)
    5.having 是对group by分组后的数据进行过滤
    6.组查询语句可以使用在:select ,having ,order by 。不能直接使用在

    4. count统计函数
    count(*) 和count(列名)
    在count 统计中,不统计值为null的行
    阿里巴巴的编码规范:在做行数统计时,要求使用count(*),以获得更高的效率或准确率

    5.分组函数中空值处理
    1).除了COUNT(*)之外,其它所有分组函数都会忽略列中的空值,然后再进行计算。
    2 ). 在分组函数中使用NVL函数
    – NVL 函数可以使分组函数强制包含含有空值的记录
    3).遇到有null空值数据时,可以组合单行函数进行使用
    例如:统计员工的平均奖金,没有奖金看为0
    select count(*),count(comm),avg(comm),avg(nvl(comm,0)) from emp;


    --补充说明
    1). min 和 max 统计字符类型时,会根据字符的先后顺序进行统计
    min和max统计时,如果数值为null,则不统计
    MIN和MAX可以用于任何数据类型
    例如:查询入职日期最早和最晚的日期
    MIN(hiredate) 最早日期 , MAX(hiredate) 最晚日期

    2). SUM和AVG函数都是只能够对数值类型的列或表达式操作。
    例如:查询工资总和,平均工资
    SUM(sal),AVG(sal) ,

    3).COUNT函数的主要功能是返回满足条件的每组记录条数
    COUNT(*):返回表中满足条件的行记录数

    4). 组函数中DISTINCT:DISTINCT会消除重复记录后再使用组函数

    其他三个函数是具有相同特性
    select * from emp;
    select min(job),max(job) from emp;
    select min(ename),max(ename) from emp;
    select min(comm),max(comm) = emp;

  • 相关阅读:
    Python的可变和不可变类型
    Pycharm设置语法规范快捷键方式
    python学习0305作业
    关于jQuery对象与DOM对象
    ie6下子元素撑大父元素
    Hibernate持久层ORM框架
    基于注解的事务管理
    掌握基于AOP事务管理
    Spring事务管理
    事务保存点savepoint
  • 原文地址:https://www.cnblogs.com/xiaomingit/p/11228831.html
Copyright © 2020-2023  润新知