Oracle专题6之Oracle的分组函数与数组分组
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,在关系数据库中,使用数据分组可以取得表数据的汇总信息。数据分组是通过分组函数、Group by以及having等子句共同实现的。1、分组函数SQL函数包含单行函数和多行函数。分组函数属于多行函数。作用
千家信息网最后更新 2025年11月09日Oracle专题6之Oracle的分组函数与数组分组
- 在关系数据库中,使用数据分组可以取得表数据的汇总信息。数据分组是通过分组函数、Group by以及having等子句共同实现的。
1、分组函数
- SQL函数包含单行函数和多行函数。分组函数属于多行函数。作用于一组数据,并对一组数据返回一个值。
- 分组函数:SELECT [column,] group function(column) ... FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];。
- 常用的分组函数:AVG、SUM、MIN、MAX、COUNT、WM_CONCAT.。
a、AVG()
- 求平均值。举例:SELECT avg(sal) FROM emp;
SQL> SELECT avg(sal) FROM emp; AVG(SAL) 2135b、SUM()
- 求和。举例:SELECT SUM(sal) FROM emp;
SQL> SELECT MIN(sal) FROM emp; MIN(SAL) 800c、MIN
- 求最小值。举例:SELECT MIN(sal) FROM emp;
SQL> SELECT MIN(sal) FROM emp;MIN(SAL) 800
d、COUNT()
- 计数(统计)。举例:求员工的总人数,SELECT COUNT(*) FROM emp;
SQL> SELECT COUNT(*) FROM emp;COUNT(*)- 15 - 在使用分组时可以使用DISTINCT关键字来去重。
SQL> select count(distinct deptno) from emp;COUNT(DISTINCTDEPTNO) 3e、WM_CONCAT行转列(让查询结果行转列)
- 该函数可以把列值以','号分隔起来,并显示成一行。
SQL> select wm_concat(ename) from emp;WM_CONCAT(ENAME)EASON,G_EASON,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MILLER2、Group by子句
- 作用:可以将表中的数据分成若干组。
- Group by子句的语法:SELECT [column,] group function(column), ... FROM table [WHERE condition] [GROUP BY group_by_expression] [HAVING group_condition] [ORDER BY column];
- 例如:求出每个部分的平均工资,要求显示:部门号,部分的平均工资。
- SELECT deptno, avg(sal) from emp group by deptno;
SQL> SELECT deptno, avg(sal) from emp group by deptno;DEPTNO AVG(SAL) 30 1566.66667 20 2312.5 10 2916.66667 - 在SELECT列表中所有未包含在组函数中的列都应包含在GROUP BY子句中。如按照部门和职位进行分组:
SQL> SELECT deptno, job, avg(sal) from emp group by deptno, job; DEPTNO JOB AVG(SAL) 20 CLERK 950 30 SALESMAN 1400 20 MANAGER 2975 30 CLERK 950 10 PRESIDENT 5000 30 MANAGER 2850 10 CLERK 1300 20 ANALYST 3000 10 MANAGER 2450已选择9行。 - 包含在group by 子句中的列不必包含在SELECT列表当中:
SQL> select avg(sal) from emp group by deptno; AVG(SAL)1566.66667 2312.52916.66667 - 再如示例:求出每个部分的员工姓名,要求显示:部分标号、员工姓名。
SQL> select deptno, WM_concat(ename) from emp group by deptno;DEPTNO WM_CONCAT(ENAME) 10 CLARK,MILLER,KING 20 EASON,FORD,ADAMS,SCOTT,JONES,G_EASON 30 ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD3、Having子句
- 作用:用于对分组后的结果进行过滤。
- 例子:请平均工资大于2500的部分,要求显示:部门号,平均工资]
- 不能再WHERE子句中使用组函数,可以在having子句中使用组函数。
SQL> select deptno,avg(sal) from emp group by deptno having avg(sal) >2500;DEPTNO AVG(SAL) 10 2916.66667 - having子句和group by子句通常一起使用。
- 如果条件中没有组函数,正常使用where语句就可以。比如说:select deptno, avg(sal) from emp where deptno=10 group by deptno;
SQL> select deptno, avg(sal) from emp where deptno=10 group by deptno;DEPTNO AVG(SAL) 10 2916.66667 - where使得分组记录数大大降低,从而提高效率。从SQL优化角度来看,尽量使用where子句。先过滤然后分组。
- 分组函数的嵌套:求部分平均工资的最大值。
- select max(avg(sal)) from emp group by deptno;
SQL> select max(avg(sal)) from emp group by deptno;MAX(AVG(SAL)) 2916.66667
函数
分组
子句
数据
部分
工资
作用
员工
部门
姓名
多行
求出
最大
最小
一行
人数
例子
信息
关键
关键字
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
达梦数据库DBA招聘
数据库的格式是什么
梁平区工商软件开发服务特点
品牌网络技术加盟流程
网络安全锁图片怎么画
广东数据库
5g网络安全风险与保险解决方案
法雷奥软件开发待遇怎么样
韦方退出百度时代网络技术
吴江区知名服务器代理厂家
浪潮服务器VMD选项设置
葡萄病虫害发生与监测数据库
弱电网络技术员怎么样
数据库磁盘使用率
杭州奎逸网络技术有限公
威力网络技术价格查询
广州工机网络技术
宝塔面板数据库打不开888
网络安全培训会红标
网络技术岗位主管工作职责
普通版微信文件服务器保存时间
重庆远程医疗健康软件开发
交通卡充值服务器
投票软件开发
服务器的80端口有什么用
物品管理服务器
pubg国际服模拟器服务器维护
建筑行业和信息网络安全
校招软件开发面试题
巅峰极客网络安全大赛wp