1.5 数据库之分组函数(多行函数)


概述

  • 多行函数:输入多行记录,返回一行结果
  • 过滤条件含有组函数,使用having关键字(不用where)

组函数

在这里插入图片描述


  • max和min函数针对任意数据类型(字符串按首字母排序,然后再看次字母,以此类推,日期看成数字)
  • AVG和SUM只能针对数值类型
  • 组函数的参数为一行行的记录
  • AVG = SUM/COUNT
  • 都不考虑空值,仅仅计算非空的数据

count函数

在这里插入图片描述
在这里插入图片描述

  • count(列名或表达式),如count(1),count(name),count(*)
  • count(1):相当于进的每一条数据显示都是1(count函数和显示/具体的值是无关的,只和是否为空有关
  • count函数返回非空的数目

  • NVL函数解决空值问题

在这里插入图片描述

在这里插入图片描述


数据分组

  • 分组使用group by
  • from要和where紧挨,having不用这样
    在这里插入图片描述
    在这里插入图片描述
  • having作为过滤条件关键字(有分组函数要用having过滤)

多层分组

在这里插入图片描述

  • 能否简写,看意思是否明确,语法是否通过

使用技巧

在这里插入图片描述- 如不遵守上图红字内容,则一条记录,avg(salary),会对应多个department_id,从而不匹配

嵌套组函数

在这里插入图片描述

  • AVG输出多行结果,传入MAX,输出一行记录

练习

在这里插入图片描述

  • 使用SQ99语法

在这里插入图片描述

  • 过滤条件:有员工的城市,内连接(要求两表都有数据)表达的就是这个意思

在这里插入图片描述

  • 非组函数的列名一定包含在group by中

在这里插入图片描述

  • 非组函数的列名一定包含在group by中
  • count参数可传入*,具体解释见count组函数内容

在这里插入图片描述

  • where的内容可通过and合并在having中,反之,不行
  • having使用范围>where使用范围

难题

查询公司在1995-1998年之间,每年雇用的人数,结果类似下面的格式

total1995199619971998
203467

在这里插入图片描述

  • 转成字符格式(char类型)来判断年份
  • 通过decode函数返回对应这一年的值,比如1(只要不为null,随意赋值)
  • 方法巧妙

在这里插入图片描述

  • 考虑部门没有员工的情况,使用右外连接
  • 不用考虑员工没部门的情况,因为题干就是查询所有部门的员工数量等,暗指以部门为基准分类(不存在无部门)
  • count(*)等价于count(department_name),当然有一个部门(此时,若某部门没有员工,同样会输出1)【???】
  • 改成对employee_id的计数,若没有员工则employee_id为null,从而正确计数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值