Oracle学习——Oracle数据库的分组函数与数据分组——having、group by、分组函数

Oracle Group By 用法之 —— Having 客户需求分析:  笔者最近接到一家客户的一个需求。他们部署了一个ERP系统,现在采用的就是Oracle数据库。现在由于企业统计分析的需要,要实现如下的需求。  1、按月份来统计2009年第一季度每个供应商的采购金额。也就是说,在报表中要能够显示出2009年1月份、2月份、3月份供应商的采购金额合计,不需要明细。  2、显示的结果按年度、月份、供应商名字进行排序。       阅读详情

Oracle数据库的分组函数与数据分组

数据分组:

在关系数据库中,使用数据分组可以取得表数据的汇总信息。数据分组是通过分组函数,group by以及having等子句共同实现的。

分组函数:

是多行函数,作用于一组数据,并对一组数据返回一个值。

语法结构:

		 SELECT  [column,]group function(column)... //加粗为分组函数位置
			FROM     table
			[WHERE   condition]
			[GROUP BY  group_by_expression]
			[HAVING    group_condition]
			[ORDER BY   column]

常用的分组函数:
AVG 平均

举例:求员工平均工资
				Select avg(sal) from emp;

SUM 求和

举例:求出员工的工资总和
				Select sum(sal) from emp;	

MIN 最小

举例:求员工工资的最小值
				Select min(sal) from emp;

MAX 最大

举例:求员工工资的最大值
				Select max(sal) from emp;

COUNT 个数

举例:求出员工的总人数
				Select count(*)from emp;
				Select count(empno) from emp;
			//求部门个数  这里需要去除重复项 (distinct)
			//select count(distinct deptno) from emp;

WM_CONCAT

查询结果行转列:把列值以’,’分割,并显示成一行
			 Select wm_concat(ename) from emp;

分组函数与空值:(空值问题很重要)

举例:求员工的平均工资

1.select sum(sal)/count(sal) from emp;
2.select sum(sal)/count(sal) from emp;
3.select avg(sal) from emp;

求员工的平均补助

1.select sum(comm)/count(*) from emp; //方法1和2结果可能是不同的
2.select sum(comm)/count(comm) from emp; //因为补助可能有空值
3.select avg(comm) from emp;

注意:分组函数会自动忽略空值

NVL函数使分组函数无法忽略空值:

	Select count(*),count(nvl(comm,0)) from emp
			  Select count(nlv(comm,0)) from emp;
			注意:nvl(comm,0) //如果comm不为null返回comm否则返回0(值自己设置)

GROUP BY:可以将表中的数据分成若干组

语法格式:
				SELECT	 [column,] group function(column),...
				FROM	 table
				[WHERE	 condition]
				[GROUP BY	group_by_expression]
				[HAVING		group_expresson]
				[ORDER BY	column];

应用举例:

1求出每个部门的平均工资,要求显示:部门号,部门的平均工资。

	Select deptno,avg(sal) from emp group by deptno;
    		//在SELECT列表中所有未包含在分组函数中的列都应包含在GROUP BY子句中,  如上,
    		sal在分组函数中,deptno不在 所以 dept应包含在group by后面

2求出每个部门的平均工资,要求显示:每个部门的平均工资

Select avg(sal) from emp group by deptno;
//包含在group by子句中的列不必包含在SELECT列表中。如上,deptno就不在select列表中

3求出每个部门的员工姓名,要求显示:部门编号,员工姓名

Select deptno,wm_concat(ename) from emp group by deptno;

HAVING子句:对分组后的结果进行过滤

			HAVING语句的语法:

			SELECT	 [column,] group function(column),...
			FROM	 table
			[WHERE	 condition]
			[GROUP BY	group_by_expression]
			[HAVING		group_expresson]
			[ORDER BY	column];

举例:
1求平均工资大于2500的部门,要求显示:部门号,平均工资

Select depino,avg(sal) from emp group by deptno having avg(sal)>2500;

//不能在where子句中使用组函数,如果条件中没有组函数,正常使用where子句就可以,比如:

	Select deptno,avg(sal)from emp where deptno=10 group by deptno;
//注意:  where子句使分组记录数大大降低,从而提高效率
		  从SQL优化角度看,尽量使用where子句,先过滤后分组

	分组函数的嵌套:必须和group by 一起使用
		求部门平均工资的最大值
		
		Select max(avg(sal)) from emp group by deptno;
Oracle - Having、Group by(组函数、分组与排序) 思维导图: ★ COUNT(Column_Name) 会对记录中的该列的种类进行划分后计数! Example: 求选课人数超过2人并且课程号中包含字符2的课程号以及具体的选课人数; [ 当查询的结果需要对组函数进行筛选的时候需要使用HAVING语句在GROUP BY后进行再次筛选!] SELECT CNO,COUNT(*) FROM SCORE GROUP BY CNO ... 阅读详情

相关推荐

Oracle分组函数与GROUP BY逻辑本质解析

分组函数(如COUNT、AVG、SUM)是SQL聚合计算的核心能力,其底层原理依赖于GROUP BY所定义的数据分组机制。在Oracle中,GROUP BY并非简单分类,而是重构结果集结构,形成多个逻辑‘数据宇宙’,每个宇宙内聚合函数独立运算且严格遵循NULL处理规则。理解分组函数对空值的差异化处理(如COUNT(*) vs COUNT(col))、执行阶段约束(WHERE前置过滤 vs HAVING后置筛选)以及字段可见性契约,是写出正确高效SQL的关键。本文结合Oracle特有行为,深入剖析分组逻辑、常

weixin_33563728的博客 218

【Oracle11g SQL详解】GROUP BY 和 HAVING 子句:分组与过滤

子句是 SQL 中用于分组统计和结果过滤的关键工具。掌握其语法和高级用法,将为数据库查询与分析奠定坚实的基础。用于对分组后的结果进行过滤。这两者常结合聚合函数使用,用以实现复杂的数据统计和分析。根据单个列的值对数据分组,并对每组数据应用聚合函数。是一种扩展分组的功能,用于生成分组的汇总数据。用于根据一个或多个列对查询结果进行分组,而。用于对分组后的结果进行进一步过滤。使用多个条件组合对分组结果进行过滤。返回按薪资级别分组后的员工数量。生成跨多个分组维度的汇总数据。分组可以基于多个列的组合值。

weixin_39372311的博客 6053

PlatformIO串口监视器波特率配置实战:从乱码到清晰输出的关键步骤

本文针对PlatformIO串口监视器常见的乱码问题,深入解析了其根源在于波特率不匹配。文章核心在于指导开发者通过修改项目根目录下的platformio.ini配置文件,正确设置monitor_speed参数,确保与代码中Serial.begin()的波特率一致,从而实现从乱码到清晰输出的关键步骤。此外,还介绍了其他实用的串口监控配置与常见避坑指南。

weixin_29183637的博客 388

Oracle——group by分组和having的用法,以及与MySQL中用法的不同之处

group by是Oracle中用来对by后面的单个或者多个字段进行分组的语法,可以根据给定数据列的每成员对查询结果进行分组统计,最终得到一个分组汇总表,用法比较灵活,常常和where或者having一起用。

m0_65249647的博客 3282

基于人脸识别的智能门禁系统设计

在当前的技术背景下,本文精心打造了一款前沿的视频识别门禁控制系统。在进行调试的时候使用的软件是Keil,编写完代码,生成文件后用下载器下载到单片机上,就能够进行程序的调试了,本次设计实现了预先设定的目标,达到了预期的效果。本次设计的人脸识别的门禁控制系统其硬件部分是以STM32F103C8T6为核心的单片机,采用0V2640摄像头对人员的人脸识别,采用矩阵按键对系统的操作以及密码的输入,使用蜂鸣器来作为报警模块,开门装置是电子锁控制,显示设备采用OLED液晶显示,无线模块在一番思索后选择了蓝牙模块传输。

2401_86147581的博客 1295

Linux安装消息队列IBM MQ 7.5开发版安装配置详解

消息队列IBM MQ 7.5开发版安装配置详解 文章目录消息队列IBM MQ 7.5开发版安装配置详解前言一、什么是IBM MQ?二、安装前准备1、安装前准备2、安装MQ Server3、启动实例4、创建队列一个名为TEXT的队列(测试)5、启动端口监听6、启动成功总结 前言 IBM 已经熟练地优化了 MQ(消息队列),在市场上已有超过 25 年的历史。借助 MQ(消息队列),如果无法立即传递消息,那么会在其等待队列中确保消息安全,直到保证传递为止。竞争产品可能会传递两次消息或根本不传递消息,而 M

zhx__的博客 5162

深入解析XTEA加密算法的核心机制与优化策略

本文深入解析XTEA加密算法的核心机制与优化策略,详细介绍了XTEA在嵌入式系统和资源受限环境中的优势,包括其高效的加解密速度和低资源消耗。文章还探讨了XTEA的轮函数设计、关键参数优化策略以及实战应用中的性能对比,为开发者提供了安全增强方案和优化技巧。

k8l9m0n的博客 241

oracle数据库怎么分组查询,oracle数据库之分组查询

本章内容和大家分享的是数据当中的分组查询。分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1 多表查询2)而在实际项目中的分组查询的使用也是比较多的,作为初学者来说,学好分组查询的姿势是十分有必要的!分组查询概念什么是分组查询:分组查询是按照一定的规则进行分组,分组以后数据会聚合,需要使用聚合函数,但是使用聚...

weixin_31313629的博客 4172

Halcon深度图转点云实战:从XYZ映射到3D可视化全解析

本文详细解析了如何使用Halcon将深度图转换为点云图,涵盖从XYZ映射到3D可视化的全流程。通过实战案例和代码示例,介绍了深度图预处理、xyz_to_object_model_3d核心转换及3D可视化技巧,适用于工业检测、三维重建等场景。

stem5的博客 764

SAP 固定资产采购简介

SAP 固定资产采购是指企业通过采购流程获取长期使用并记录为固定资产的物品。固定资产是企业为长期使用而购置的资产,如机器设备、办公设备、建筑物、车辆等,通常这些资产的使用期限较长,并且在资产负债表上记录。在SAP系统中,固定资产采购流程通常与物料管理(MM)模块和固定资产管理(FI-AA)模块相结合。这个过程涉及从需求的提出、采购订单的创建,到货物接收、发票校验和资产激活的多个步骤。

我小时候很黑的博客 1727

Oracle数据库之分组统计查询

一、分组统计查询

weixin_42480196的博客 743

Transformer在BEV感知中的统治地位

Transformer在BEV感知中的统治地位 ,人工智能,计算机视觉,大模型,AI,本文围绕 Transformer 在 BEV 感知中的统治地位展开,介绍了 Transformer 的基础原理,如自注意力、多头注意力机制等,以及 BEV 感知的概念、任务与挑战。阐述了 Transformer 在 BEV 感知中的技术优势,包括全局建模、灵活特征融合和长距离依赖捕捉能力,还介绍了典型架构、代码示例及在自动驾驶目标检测等领域的应用案例。同时,评估了其性能,提及优化方法,并展望了与其他技术融合、端到端系统等…

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 20万+

oracle 5表关联查询,Oracle学习笔记5 - 表查询

Oracle学习笔记五 --- 表查询下面使用scott用户,用到的表见底部1、查看表结构desc [表名]desc emp2、distinct命令,去除重复行3、练习查找SMITH的工作,薪水等selectdeptno,job,salfromempwhereename='SMITH';4、函数nvl如果值为null,即以0代替查找员工年工资selectsal*13+comm*1...

weixin_42498643的博客 431

【原理图PCB专题】Cadence17.4 PCB位号重排与反标

Cadence17.4 PCB位号重排与反标比Cadence16版本更简单一些,那到底如何操作?

一点硬件 1181

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Oracle DB 对行进行分组-group by、having

创建数据组 所有组函数都将表当作一个大型的信息组。但是,有时需要将此信息表分成几个较小的组。可以通过使用GROUP BY子句完成此任务。 创建数据组:GROUP BY子句的语法 可以通过使用GROUP BY子句将表中的行分成较小的组。 SELECT  column, group_function(column) FROM  table [WHERE  c

一抹曦阳-Oracle 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Oracle 对行进行分组-group by、having

创建数据组 所有组函数都将表当作一个大型的信息组。但是,有时需要将此信息表分成几个较小的组。可以通过使用GROUP BY子句完成此任务。 创建数据组:GROUP BY子句的语法 可以通过使用GROUP BY子句将表中的行分成较小的组。 SELECT  column, group_function(column) FROM  table [WHERE  condi

Aamir 的专栏 2087

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Oracle数据库:oracle组函数,聚合函数,多行函数,avg,sum,min,max,count,group by,having

Oracle数据库:oracle组函数,聚合函数,多行函数,avg,sum,min,max,count,group by,having

weixin_46838716的博客 2429

MySQL与Oracle中GROUP BY的用法对比与实践指南

本文对比分析了MySQL与Oracle数据库中GROUP BY子句的关键差异。测试显示:MySQL允许SELECT非分组字段但结果不确定,Oracle则严格执行标准要求字段匹配;多条件分组时两库结果一致,均以组合条件判定分组;聚合函数配合GROUP BY可实现统计功能;WHERE用于分组前过滤,HAVING处理分组后筛选。开发者应遵循严格SQL标准以确保查询准确性和跨数据库兼容性,避免MySQL宽松语法导致的数据不确定性。

ywl470812087的博客 12万+

Oracle DB 对行进行分组-group by having

Oracle DB 对行进行分组-group by having

qq_43679940的博客 293

group by和having的区别

group by 按照某个字段或者某些字段进行分组。 having having是对分组之后的数据进行再次过滤 案例 找出每个工作岗位的最高薪资 select max(sal) from emp group by job; 注意:分组函数一般都会和group by 联合使用,这也是为什么它被称为分组函数的原因。并且任何一个分组函数(count sum avg max min)都是在group by语句结束之后才会执行的。当一条sql语句没有group by的话,整张表的数据会自成一组。 select en

write less , do more 1万+

Oracle_4th_分组(group by)和筛选(having)

介绍了分组和对分组结果进行筛选的例子。

weqpo的博客 4722

【Oracle数据库指南】第03篇:Oracle SQL分组统计与排序——GROUP BY、HAVING与ORDER BY深度解析

摘要 本文系统讲解Oracle SQL分组统计功能,涵盖基础分组函数(COUNT/SUM/AVG/MAX/MIN)、LISTAGG字符串聚合、ROLLUP/CUBE多维汇总等核心用法。通过分组函数与GROUP BY子句的组合,配合HAVING条件过滤和ORDER BY排序,实现从简单计数到复杂报表的多层次数据分析。文章包含大量实用SQL示例,帮助读者掌握数据汇总与统计的关键技术。

xyghehehehe的专栏 517

Oracle 分组数据

分组是在SELECT语句中使用GROUP BY子句创建的。示例: 由于使用了GROUP BY,将不必指定要评估和计算的每个分组,这是自动完成的。GROUP BY子句指示Oracle对数据进行分组,并对每一个分组(而不是对整个结果集)执行聚合。在使用GROUP BY之前,下面列出了你需要知道的使用它的一些重要规则。where子句通常也用于行过滤。但是,where在这里不适用,因为where可以可以过滤特定的行,而不是分组。事实上,where无法适用于分组。Oracle为此提供了另一个子句:HAVING。whe

weixin_45102678的博客 5806

Oracle分组查询group by的用法及讲解

Oracle分组查询group by的用法及讲解

weixin_58698336的博客 3777
上一篇: Oracle学习——单行函数——条件表达式、Case、Decode、嵌套函数
下一篇: Oracle学习——Oracle数据库的多表查询——笛卡尔集、等值与非等值连接、外连接、自连接
bug小白
博客等级 码龄10年 34粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值