zoukankan      html  css  js  c++  java
  • 02-分组查询

    分组函数:组用于一组数据,并对一组数据返回一个值;

    SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句

    group by 子句对数据分组;
    having 子句过滤分组结果集(可使用组函数);

    AVG:只适用于Number,计算非空;


    count(expr):使用于任何类型,返回expr不为空的记录数;


    Max/Min:适用于varchar、Number、Date类型;


    STDDEV:标准差(很少用到);


    SUM:只是用于Number,计算非空;


    count(distinct expr):返回expr非空且不重复记录;


    group by:查询列中不是组函数,一定要写在此其中;


    不能在where子句中使用组函数;


    可在having子句中使用组函数;


    组函数可以嵌套;

    eg:

     1 --组函数处理多行返回一行吗? 
     2 --
     3 
     4 --组函数不计算空值吗?
     5 --
     6 
     7 --where子句可否使用组函数进行过滤? 
     8 --不可以,用having替代
     9 
    10 --查询公司员工工资的最大值,最小值,平均值,总和
    11 select max(salary),min(salary),avg(salary),sum(salary)
    12 from employees;
    13 
    14 --查询各job_id的员工工资的最大值,最小值,平均值,总和
    15 select job_id,max(salary),min(salary),avg(salary),sum(salary)
    16 from employees
    17 group by job_id;
    18 
    19 --选择具有各个job_id的员工人数
    20 select job_id,count(employee_id)
    21 from employees
    22 group by job_id;
    23 
    24 --查询员工最高工资和最低工资的差距(DIFFERENCE)
    25 select max(salary),min(salary),max(salary)-min(salary) "DIFFERENCE"
    26 from employees;
    27 
    28 --查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
    29 select manager_id,min(salary)
    30 from employees
    31 where manager_id is not null
    32 group by manager_id
    33 having min(salary) >= 6000;
    34 
    35 --查询所有部门的名字,location_id,员工数量和工资平均值
    36 select department_name,location_id,count(employee_id),avg(salary)
    37 from employees e right outer join departments d
    38 on e.department_id = d.department_id
    39 group by department_name,location_id;
    40 
    41 --查询公司在1995-1998年之间,每年雇用的人数,结果类似下面的格式
    42 --total    1995    1996    1997    1998
    43 --20       3       4       6       7
    44 select count(*) "total",
    45        count(decode(to_char(hire_date,'yyyy'),'1995',1,null)) "1995",
    46        count(decode(to_char(hire_date,'yyyy'),'1996',1,null)) "1996",
    47        count(decode(to_char(hire_date,'yyyy'),'1997',1,null)) "1997",
    48        count(decode(to_char(hire_date,'yyyy'),'1998',1,null)) "1998"
    49 from employees
    50 where to_char(hire_date,'yyyy') in ('1995','1996','1997','1998');
  • 相关阅读:
    学到的一种编程风格
    防止忘记初始化NSMutableArray的方法
    == 和 isEqualToString的区别之备忘
    IOS开发中--点击imageView上的Button没有任何反应
    [__NSCFString absoluteURL]错误的解决方案
    二叉树镜像
    判断树的子结构
    算法练习-贪心问题
    重建二叉树:
    IDEA搭建web项目出现中文乱码问题
  • 原文地址:https://www.cnblogs.com/shici/p/13397422.html
Copyright © 2011-2022 走看看