zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    几个新角色:数据科学家、数据分析师、数据(算法)工程师
    人类投资经理再也无法击败电脑的时代终将到来了...
    Action Results in Web API 2
    Multiple actions were found that match the request in Web Api
    Routing in ASP.NET Web API
    how to create an asp.net web api project in visual studio 2017
    网站漏洞扫描工具
    How does asp.net web api work?
    asp.net web api history and how does it work?
    What is the difference between a web API and a web service?
  • 原文地址:https://www.cnblogs.com/xiaomingit/p/11228831.html
Copyright © 2011-2022 走看看