前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle基础|oracle分组的用法|oracle分组查询|group by的使用

oracle基础|oracle分组的用法|oracle分组查询|group by的使用

作者头像
小小鱼儿小小林
发布2021-10-26 10:48:19
4.9K0
发布2021-10-26 10:48:19
举报
文章被收录于专栏:灵儿的笔记灵儿的笔记

目录

分组查询

概念

语法以及执行顺序

组函数

group by 子句

练习

having用法

练习


分组查询

概念

所谓组查询即将数据按照某列或者某些列相同的值进行分组,然后对该组的数据进行组函数运用,针对每一组返回一个结果。 tips: 1.组函数可以出现的位置: select子句和having 子句 2.使用group by 将将行划分成若干小组。 3.having子句用来限制组结果的返回。

语法以及执行顺序

SQL

顺序

select ...

5

from ...

1

where ...

2

group by col_name,col_name

3

having ...

4

order by...

6

执行的时候,先from,再where限制每一条记录的返回,返回结果进行分组,应用组函数,再用having限制组函数返回的结果,接下来是select抽取要显示的列,最后排序

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

组函数

常见有5个: avg:求平均值 count:求总数 max:最大值 min:最小值 sum:求和 avg([distinct] column )/sum([distinct] column) :可以作用在存储数字数据的列上。

max(),min():可以作用在任意类型的数据之上。对字符型数据的最大值,是按照首字母由A~Z的顺序排列,越往后,其值越大。当然,对于汉字则是按照其全拼拼音排列的,若首字符相同,则比较下一个字符,以此类推。

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 条件 : 各部门 ,职称相同。

代码语言:javascript
复制
 select dept_id,title, avg(salary)
        from s_emp
        group by dept_id,title;
        order by avg(salary);

2.查看所有部门的部门工资总和,按照部门工资的降序排序 目标 : sum(salary) from :s_emp 条件 :各部门工资

代码语言:javascript
复制
 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

代码语言:javascript
复制
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;

代码语言:javascript
复制
  select title,sum(salary) sumS
    from s_emp
    where title not like 'VP%'
    group by title
    having sum(salary)>5000
    order by sumS desc;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分组查询
    • 概念
      • 语法以及执行顺序
        • 组函数
          • group by 子句
            • 练习
          • having用法
            • 练习
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档