zoukankan      html  css  js  c++  java
  • Oracle学习笔记<5>

    组函数(多值函数)

    数据库中函数的分类:
    1)单值函数 Single Rows Functions
    特点:n条数据参与函数处理,最终得到n条结果。
    2)多值函数(组函数) Multiple Rows Functions
    特点:n条数据参与函数处理,得到的结果可能小于n。


    1.常见的组函数
    avg 计算平均值
    max 计算最大值
    min 计算最小值
    sum 计算代数和
    count 计算某个字段非空字段值的总数量

    2.组函数语法
    select 函数名(字段名)
    from 表名
    where 条件
    [group by 要分组的字段]
    [having 分组之后的查询条件];

    group by如果不出现,则视为将表中的所有数据分为一个大组。
    最终的组函数运算只有一个结果。


    关键字:
    1)group by 用来指定分组的依据,
    例如:group by 字段A
    在分组时就会把所有字段A的值相等的
    数据分为一组。
    2)having
    做限定性查询的。
    功能类似于where。

    位置
    1)group by关键字出现在where子句的后面。
    2)having 出现在group by后面。
    六大关键字书写顺序:
    select .. 5
    from .. 1
    where .. 2
    group by .. 3
    having .. 4
    order by.. 6

    注意:
    1)出现在select后面的字段,
    要么是组函数,要么是出现在group by后面的字段。
    即分组的依据字段。
    2)where和having的区别
    where发生在分组之前,
    定义的是有关单值筛选的条件。
    在where后面不允许出现组函数。
    having发生在分组之后,
    定义的是有关小组的筛选条件。
    在having后面不允许出现单值条件判断。

    练习:
    1.查看各个部门的最高工资
    select max(salary)
    from s_emp
    group by dept_id;
    2.查看各个部门的员工数
    count函数 计算某个字段非空字段值的数量

    count(*) 把所有字段的字段值数量都计算出来,
    取最大的为查询结果。
    count(1)

    3.查询各个部门各个职称的平均薪水和最大薪水,并且平均薪水大于2000的部门id;
    根据多个字段进行分组:
    group by 字段1,字段2...
    分组时将所有出现在group by后面的字段值都相等的数据
    分为一组。
    select avg(salary),max(salary),dept_id
    from s_emp
    group by dept_id,title
    having avg(salary) > 1000;


    4.查询title中不包含vp字符串的每个职位的平均薪水和总薪水,并对平均薪水进行降序排列,并且每个职位的总薪水大于5000?
    select avg(salary),sum(salary)
    from s_emp
    where title not like '%vp%'
    group by title
    having sum(salary) > 5000
    order by avg(salary) desc;

    作业:
    1)查询所有员工的平均工资,最高工资最低工资,工资总和,还有有多少个员工?
    select avg(salary),max(salary),min(salary),
    sum(salary),count(*)
    from s_emp;
    2)查询每个部门的平均工资?对平均工资降序排序.平均工资大于1400.
    select avg(salary)
    from s_emp
    group by dept_id
    having avg(salary) > 1400
    order by avg(salary) desc;
    3)查看各个部门的最高工资
    select dept_id,max(salary)
    from s_emp
    group by dept_id;
    4)查看各个部门的员工数
    select count(*)
    from s_emp
    group by dept_id;
    5)查询各个部门各个职称的平均薪水和最大薪水,
    并且平均薪水大于2000的部门id。
    select avg(salary),max(salary),dept_id
    from s_emp
    group by dept_id,title
    having avg(salary) > 2000;
    6)查询title中不包含vp字符串的每个职位的平
    均薪水,并对平均薪水进行降序排列,并且每个职位
    的总薪水大于5000。
    select avg(salary)
    from s_emp
    where title not like '%vp%'
    group by title
    having sum(salary) > 5000
    order by avg(salary) desc;

    8)查看每个区域部门数?
    区域-部门:1对多
    select count(*)
    from s_dept
    group by region_id;

    查询每个部门的员工数?
    select count(*)
    from s_emp
    group by dept_id;
    9)查询南美地区的部门数?
    区域名字 = 南美
    select count(*)
    from s_dept d,s_region r
    where d.region_id = r.id
    and r.name = 'South America';
    10)查询南美地区工资大于1400的员工的信息?
    三表查询
    select e.id,e.last_name,e.salary
    from s_emp e,s_dept d,s_region r
    where e.dept_id = d.id
    and d.region_id = r.id
    and r.name = 'South America'
    and e.salary > 1400;

    方式二:子查询(嵌套查询)
    select id,last_name,salary
    from s_emp
    where dept_id in(select d.id
    from s_dept d,s_region r
    where d.region_id = r.id
    and r.name = 'South America');

    SQL:查询所有工作在南美区域的部门id?
    select d.id
    from s_dept d,s_region r
    where d.region_id = r.id
    and r.name = 'South America';


  • 相关阅读:
    2020.05.02【NOIP普及组】模拟赛C组31总结
    【提高组NOIP2008】传纸条 题解
    【NOIP2006PJ】Jam的计数法(count)题解
    话说placeholder
    css垂直居中
    fixed和absolute的区别
    链接的属性href=“?” ?该些什么及优缺点
    论ul、ol和dl的区别
    笔记本插拔电源黑屏一下
    CSS 样式书写规范
  • 原文地址:https://www.cnblogs.com/weixinyu98/p/9999395.html
Copyright © 2011-2022 走看看