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

(课堂笔记)Oracle 聚合函数与 GROUP BY 分组查询

本文总结了Oracle中聚合函数与GROUP BY分组查询的核心知识点。


主要内容包括:

1)常用聚合函数(SUM/MAX/MIN/AVG/COUNT)的使用及NULL值处理;

2)GROUP BY语法结构和分组查询示例;

3)HAVING子句与WHERE的区别;

4)SQL语句执行顺序;

5)COUNT不同写法的区别;

6)常见错误分析及综合练习。


重点强调了WHERE与HAVING的应用场景、非分组字段的使用限制以及COUNT的性能优化建议,并提供了典型例题和自测题帮助理解。


(课堂笔记)Oracle 聚合函数与GROUP BY分组查询


以下是根据你提供的课堂内容,整理出的《聚合函数与GROUP BY分组查询》复习笔记,结构清晰、便于学生复习和记忆:


📌 一、聚合函数(对多行数据进行汇总计算)

函数作用说明
SUM(列)求和对数值列求和
MAX(列)最大值忽略NULL
MIN(列)最小值忽略NULL
AVG(列)平均值忽略NULL
COUNT(列)计数忽略NULL
COUNT(*)/COUNT(1)总行数不忽略NULL

空值(NULL)不参与聚合计算


📌 二、基础使用示例

sql

SELECT SUM(SAL) AS 总薪资, MAX(SAL) AS 最高薪资, MIN(SAL) AS 最低薪资, AVG(SAL) AS 平均薪资, COUNT(SAL) AS 员工个数 FROM EMP;

📌 三、GROUP BY 分组查询

语法结构:

sql

SELECT 分组字段, 聚合值 FROM 表 GROUP BY 分组字段;

示例:每个部门的平均薪资

sql

SELECT DEPTNO, SUM(SAL) AS 总薪资, AVG(SAL) AS 平均薪资 FROM EMP GROUP BY DEPTNO;

📌 四、HAVING 子句(对组进行过滤)

HAVING 用于过滤聚合值(如总数、平均值等)
WHERE 用于过滤行数据,不能用于聚合值

示例:只显示人数 >= 4 的部门

sql

SELECT DEPTNO, SUM(SAL) AS 总薪资, MAX(SAL) AS 最高薪资 FROM EMP GROUP BY DEPTNO HAVING COUNT(1) >= 4;

📌 五、执行顺序(非常重要)

sql

FROM -- 1. 读取表 WHERE -- 2. 行过滤(不能使用聚合) GROUP BY -- 3. 分组 HAVING -- 4. 组过滤(可以使用聚合) SELECT -- 5. 输出字段 ORDER BY -- 6. 排序

⚠️非分组字段、非聚合值,不能出现在 SELECT 中


📌 六、COUNT 的区别(面试常见)

写法说明是否忽略NULL
COUNT(1)常数列,统计行数
COUNT(*)统计所有行
COUNT(列名)只统计该列非NULL的行

✅ 性能建议:若只统计行数,推荐使用COUNT(1)


📌 七、综合练习(含 WHERE + GROUP BY + HAVING + ORDER BY)

题目:

筛选 1981 年入职且薪资 ≥ 1000 的员工,按部门分组,
显示部门总薪资、最高薪资,
且部门统计人数 ≥ 3,结果按部门编号升序。

答案:

sql

SELECT DEPTNO, SUM(SAL) AS 总薪资, MAX(SAL) AS 最高薪资 FROM EMP WHERE TO_CHAR(HIREDATE, 'YYYY') = '1981' AND SAL >= 1000 GROUP BY DEPTNO HAVING COUNT(EMPNO) >= 3 ORDER BY DEPTNO;

📌 八、常见错误提醒

错误写法原因
SELECT 非分组字段该字段不在 GROUP BY 中,也不是聚合值
WHERE 中使用聚合函数WHERE 在分组前执行,无法识别聚合
HAVING 中不用聚合纯字段过滤应放在 WHERE 中

📌 九、复习自测题

sql

-- 排除 20号部门经理 和 10号文员 -- 按入职年份分组 -- 显示最高薪资、最低薪资 -- 要求该年入职人数 ≥ 2 -- 按年份升序

参考答案:

sql

SELECT TO_CHAR(HIREDATE, 'YYYY') AS YEAR, MAX(SAL) AS 最高薪资, MIN(SAL) AS 最低薪资 FROM EMP WHERE NOT (DEPTNO = 20 AND JOB = 'MANAGER' OR DEPTNO = 10 AND JOB = 'CLERK') GROUP BY TO_CHAR(HIREDATE, 'YYYY') HAVING COUNT(EMPNO) >= 2 ORDER BY YEAR;
http://www.jsqmd.com/news/711491/

相关文章:

  • MQTT教程详解-03. 高级知识点
  • ACEBOTT QE007智能家居STEAM教育套件评测
  • 布局澳洲电商必知的平台有哪些
  • Python模块导入机制与FastAPI
  • [2026.4.21]WIN10.22H2.19045.7184[PIIS]中简优化版 丝滑流畅
  • SQLite PRAGMA
  • 大路灯护眼灯哪个牌子好?落地护眼大路灯灯排行榜前十名品牌推荐
  • Arm GICv3虚拟中断控制器架构与寄存器解析
  • 终极音乐解锁指南:让你的加密音频重获自由播放权
  • IrfanView|轻量高速看图工具(绿色便携)
  • HoVer-Net核实例分割与分类:医学图像分析的深度架构解析与实战指南
  • 八大网盘直链解析技术深度解析:开源工具LinkSwift实现原理与实践指南
  • APK-Installer入门指南
  • 【含最新安装包】最细保姆级教程!OpenClaw 零基础一键部署全步骤
  • 2026年Q2不锈钢镀锌板花箱选型品牌排行与参考 - 优质品牌商家
  • 一曲旧韵逢故人,岁月不负你的样子
  • 成都失联亲友查找:合法高效的技术路径与服务推荐 - 优质品牌商家
  • 医疗C项目必须建立的5级代码审查漏斗:覆盖DO-178C/IEC 62304/FDA SWCG的三重合规验证机制
  • 包装设计公司哪家好?价格差很多时,关键看材质、印刷工艺和实际包装成本
  • 医疗器械显示屏盖板适合什么样的防眩光板材?兼容性与稳定性分析
  • 2026年公共营养师报考实操推荐 附正规渠道参考 - 优质品牌商家
  • 04.工业级 YOLOv8 落地:训练 + 推理 + 优化全解析
  • 3D高斯泼溅与自适应Gabor视频表示技术解析
  • IT故障速查手册:从诊断到解决
  • 延迟求和波束形成(DSB)、最小方差无失真响应(MVDR)波束形成、线性约束最小方差(LCMV)波束形成、广义特征值分解(GEVD)波束形成,以及独立成分分析(ICA)、快速独立成分分析
  • BabelDuck开源AI语言学习工具:部署与实战指南
  • 2026年专业大型粮仓空调厂家top10排行解析:粮库低温空调,粮库恒温恒湿空调,粮面空调,排行一览! - 优质品牌商家
  • [具身智能-483]:OpenAI API:客户端用户、客户端应用程序、客户端OpenAI API库或SDK、云端编排基础设施、云端大模型各种的职责?如何协同完成服务的?
  • Docker WASM边缘编排实战(从K3s到WASI-NN加速器全链路打通)
  • RVC变声器实战指南:从入门到精通的16个核心技巧