• oracle组查询


    概念:

    所谓组查询即将数据按照某列或者某些列相同的值进行分组,然后对该组的数据进行组函数运用,针对每一组返回一个结果。

    note:

    1.组函数可以出现的位置: select子句和having 子句

    2.使用group by 将将行划分成若干小组。

    3.having子句用来限制组结果的返回。

    语法:

    select ...

    from ...

    where ...

    group by col_name,col_name

    having ...

    order by...

    group by col_name:即将数据按照col_name相同值进行分组

    组函数常见有5个:

    avg:求平均值

    count:求总数

    max:最大值

    min:最小值

    sum:求和

    avg([distinct] column )/sum([distinct] column) :可以作用在存储数字数据的列上。

    max(),min():可以作用在任意类型的数据之上。

    对字符型数据的最大值,是按照首字母由AZ的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。

    count([distinct] column | *) :

    count(*) : 统计表中所有的行数

    count(column) : 返回所有非空行的行数

    练习:

      查看各个部门的最高工资

          查看各个部门的员工数

          查看各个部门的平均工资

          查看各个部门的最低工资

    group by 子句:

    1.用来将表中的行划分成若干更小的组

    2.出现在select子句中,但是没有出现在组函数中的列必须出现在group by子句中

    3.出现在group by中的列不一定出现在select子句中。

    4.group by子句中的列出现在select结果中,表意性比较强。

    5.group by子句中出现多列的时候,表示按照从左至右的顺序进行分组,即先按照第一列分组,  然后再第一列分好的组里面 按照第二列进行分组,以此类推。

    6.限制组结果的返回一定使用having不能使用where

      需求:

    1.查看各部门,职称相同的人的平均工资。

    目标查询: 平均工资

    from : s_emp

    条件 各部门 ,职称相同。

    select dept_id,title, avg(salary)

    from s_emp

    group by dept_id,title;’

    order by avg(salary);

    2.查看所有部门的部门工资总和,按照部门工资的降序排序

    目标 : sum(salary)

    from s_emp

    条件 :各部门工资

    select dept_id, sum(salary) s

    from s_emp

    group by dept_id

    order by s desc;

    3.查找部门平均工资>1000的所有部门的id和平均工资

       目标: 部门id avg(salary)

       from:   s_emp

       条件:  部门平均工资

    部门平均工资>1000

    select dept_id,avg(salary)

    from s_emp

    group by dept_id

    having avg(salary)>1000

    order by dept_id;

    having: 限制组结果的返回。

    1.如果希望限制组结果的返回,那么直接使用having子句跟在group by 子句之后。

    需求:

    1.查看职称不以VP开头的所有员工,

    2.并且将他们以职称分组,

    3.求各职称的工资总和,

    4.将工资综合>5000的职称和工资总合显示出来。

    目标:title sum(salary)

     from: s_emp

     条件:职称不以VP开头 title  not like 'VP%'

    group by:各职称

      限制组结果: sum(salary)>5000;

    select title,sum(salary) sumS

    from s_emp

    where title not like 'VP%'

    group by title

    having sum(salary)>5000

    order by sumS desc;

  • 相关阅读:
    图片在网页中不能显示
    利用QQWry.dat显示客户IP所在地 [转贴]
    asp.net时间戳与系统时间互转 mssql
    酷友网 http://www.kuiu.cn/ 再次上线了!!!
    string.Format .net string 补空
    ASP.net中md5加密码的方法[转]
    C#中|(位或)和||(逻辑或)有什么区别?
    .net身份证号码验证
    实用jquery代码片段集合
    ERROR: “System.Web.Mvc.Controller.File(string, string, string)”是一个“方法”
  • 原文地址:https://www.cnblogs.com/yzqm666/p/5859827.html
Copyright © 2020-2023  润新知