当前位置: 首页 > news >正文

【Oracle数据库系列笔记】聚合函数与其他函数

聚合函数与分组查询

使用SELECT语句不仅可以查询数据,而且可以对数据进行统计和分组。例如:

  • 统计记录个数
  • 汇总字段记录
  • 计算平均值

为了能够实现分组操作,必须在SQL语句中使用聚合函数(也称为多行函数分组函数)。聚合函数用来接收一组数据来进行计算,根据需要返回一组或单个结果。这组数据可以是表或者是表分成的组。聚合函数通常需要和group by子句配合使用。

ORACLE常用的聚合函数如下:

  • AVG():返回传入列值的平均值
  • COUNT():返回查询的行的数目
  • SUM():返回传输的列的总和
  • MIN():返回查询中的列的最小值
  • MAX():返回查询中的列的最大值

聚合函数的简单示例如下:

SELECT * FROM emp;
-- 	AVG(),返回传入列值的平均值
SELECT AVG(sal) FROM emp;
SELECT AVG(comm) FROM emp;
SELECT SUM(comm)/14 FROM emp;

-- 	COUNT(),返回查询的行的数目
SELECT COUNT(*) FROM emp;
SELECT COUNT(comm) FROM emp;
SELECT COUNT(DISTINCT deptno) FROM emp;

-- 	SUM(),返回传输的列的总和
SELECT SUM(sal) FROM emp;

-- 	MIN(),返回查询中的列的最小值
SELECT MIN(sal) FROM emp;

-- 	MAX(),返回查询中的列的最大值
SELECT MAX(sal) FROM emp;

聚合函数与group by子句配合使用的示例如下:

-- 使用GROUP BY子句分组查询
-- SELECT column,group_function(column)
-- FROM TABLE
-- [WHERE condition]
-- [GROUP BY grou_by_expression]
-- [ORDER BY column];

-- 计算出每个部门的公司所有员工的工资总和(按升序排列)
SELECT deptno,SUM(sal)
FROM emp
GROUP BY deptno
ORDER BY SUM(sal) ASC;

-- 在select列表中的任何列或表达式(非统计函数计算列)必须出现在GROUP BY 子句中
SELECT deptno,SUM(sal) salary
FROM emp
GROUP BY deptno;

-- 在GROUP BY子句中的列或表达式不必一定出现在select列表中
SELECT SUM(sal) sum_sal,AVG(sal)
FROM emp
GROUP BY deptno
ORDER BY deptno;

-- 按照部门和工作分组,计算出工资和
SELECT deptno,job,SUM(sal)
FROM emp
WHERE deptno IN (20,30)
GROUP BY deptno,job
HAVING SUM(sal)>2000
ORDER BY deptno;

其他函数

ORACLE中其他常用的函数主要有:

  • NVL():转换NULL值为一个实际的值
  • NVL2(a,b,c):如果表达式a不为null,则nvl2返回表达式b的值;如果为null,则nvl2返回表达式c的值。
    表达式a可以是任何数据类型
  • NULLIF(a,b):比较两个表达式,如果相等则返回NULL,如果不相等则返回第一个表达式
  • COALESCE():返回列表中第一个非NULL的值
  • DECODE(value,if1,then1,if2,then2,if3,then3,else):根据特定的条件,实现IF-THEN-ELSE条件判断的返回值

上述这些函数的示例如下:

-- NVL(),转换NULL值为一个实际的值
-- 计算emp表中所有员工的年薪
SELECT empno,ename,(sal+comm)*12 "年薪"
FROM emp;
SELECT empno,ename,(sal+NVL(comm,0))*12 "年薪"
FROM emp;

-- NVL2(a,b,c),如果表达式a不为null,则nvl2返回表达式b的值;如果为null,则nvl2返回表达式c的值
-- 计算emp表中所有员工的年薪,如果没有奖金的话,那么年薪为13个月工资;否则为12个月的工资+奖金
SELECT empno,ename,NVL2(comm,(sal+comm)*12,sal*13) "年薪"
FROM emp;

-- NULLIF(a,b),比较两个表达式,如果相等则返回NULL,如果不相等则返回第一个表达式
SELECT NULLIF('apple','apple'),NULLIF('apple','orange')
FROM dual;

-- COALESCE(),返回列表中第一个非NULL的值
SELECT ename,COALESCE(comm,mgr,sal,empno,ename) COALESCE FROM emp;

-- DECODE(value,if1,then1,if2,then2,if3,then3,,,,else),实现IF-THEN-ELSE条件判断的返回值
-- 替换部门编号为实际的部门名称
SELECT ename,DECODE(deptno,10,'财务部',20,'研发部',30,'销售部','运营部') "部门"
FROM emp;

相关文章:

  • asp网站制作软件/附近电脑培训班零基础
  • 澧县网页定制/百度的seo排名怎么刷
  • 坂田网站建设哪家好/微信营销的特点
  • wordpress手机端网站/交换链接营销的典型案例
  • 怎么做私人彩票网站/百度关键词排名
  • 网络公司网站源码下载/网站网络排名优化方法
  • wireshark 笔记
  • 图像运算和图像增强三
  • [Spring boot] Spring boot 实现Excel批量导入数据并将文件保存到本地
  • Kafka
  • 【云原生丨K8s系列20】 RBAC 的配置⽅法演示(上):创建⼀个只能访问某个 namespace 的⽤户
  • Vue中created和mounted详解
  • 第五章 trans数据流转换(算子)
  • 【命令】进程常用命令
  • Linux--权限
  • 【C语言】文件操作scanf,fscanf,sscanf(第二弹)
  • 广义表基础
  • 【数据结构】------ 堆