oracle-sql多行函数

概述

本文讲解多行函数,多行函数一般用于 数值类型 的列,多用于 统计

在多行记录中查询最大值

使用下面函数:

max(列名)

注意:只返回一行

查询最高工资
select max(sal) from emp

注意: 此时不能查询其他的列,下面查询不正确

select ename,max(sal) from emp

在多行记录中查询最小值

使用下面函数:

min(列名)
查询最少工资
select min(sal) from emp

在多行记录中计算平均值

使用下面函数:

avg(列名)
查询平均工资
select avg(sal) from emp

在多行记录中求和

使用下面函数:

sum()
  1. 查询工资的总和
    select sum(sal) from emp
    
  2. 查询工资和奖金的总和
    select sum(sal+comm)  from emp
    
    上面结果是错的,如果有一个值为null,那么sal+comm后的值是null,需要对null的处理

函数的嵌套

将一个函数嵌套在另一个函数里

解决上面问题的方法:

select sum(nvl(sal,0)+nvl(comm,0)) from  emp;

查询结果的行数

使用下面函数:

count()

返回表中的记录数,没有数据返回0

  1. 查询员工总数

    select count(*) from emp
    

    或者

    select count(1) from emp
    
  2. 查询工资大于1600(含1600),有多少人

    select count(*) from emp where 1600<=sal
    
  3. 查询有奖金的人数

    select count(comm) from emp
    

    当 值为null时,count()函数 不计数
    但一般我们编写sql要明确,不要引起歧义,所以sql如下:

    select count(*) from emp where comm>0
    
  4. 查询有多少个工作种类

    select count(distinct job) from emp
    

单行函数不能和多行函数同时存在

下面sql报错

select length(ename),max(sal) from emp

多行函数可以同时存在

下面sql正确

select max(sal),min(sal),count(*) from emp

练习

  1. 部门编号是10的,工资最高的是多少钱

  2. 查询全公司平均奖金是多少钱

  3. 查询部门编号是20的平均工资

  4. 工资大于1600(含1600),有多少人

  5. 查询部门编号是30,得到最多奖金的金额


原文出处:/show_1EF34agV02K9.html