news 2026/4/28 1:55:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(课堂笔记)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;
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 1:51:21

开箱即用的AI智能客服系统源码,上下文连贯对话,知识库优先响应

温馨提示:文末有资源获取方式最近在企业服务类项目中,需要一个能快速部署、支持智能对话的客服系统。调研了一圈,发现市面上很多方案要么二次开发太复杂,要么对上下文理解支持不够好。后来找到一套PHP原生开发的客服系统源码&…

作者头像 李华
网站建设 2026/4/28 1:50:42

一份力学报告要改几轮才算合格?IA-Lab联动AI 检测报告生成助手,把“慢且易错”的环节彻底提速

在材料检测领域,力学性能测试往往被视为“硬指标”。抗拉强度、屈服强度、延伸率、冲击韧性……这些数据直接决定材料能不能用、敢不敢用。但有意思的是,真正让很多实验室头疼的,并不是测试本身,而是测试之后的那份报告。数据从设…

作者头像 李华
网站建设 2026/4/28 1:44:41

麒麟V10SP1环境搭建(qt5.12.6+mysql5.7.42+ni-visa)

银河麒麟V10环境搭建 以下是根据您提供的环境搭建笔记整理的详细指南。内容基于银河麒麟桌面操作系统V10(SP1) 2403版本,软件版本包括MySQL 5.7.42、Qt 5.12.6、g 9.4.0和gcc 9.4.0。指南结构清晰,分为资源准备、安装步骤和验证环节,确保真实…

作者头像 李华
网站建设 2026/4/28 1:39:08

FP4量化技术:深度学习模型压缩与硬件加速实践

1. FP4量化技术概述:从理论到硬件实现在深度学习模型部署领域,量化技术已经成为平衡计算效率与模型精度的关键手段。FP4(4位浮点)量化作为最新一代的压缩技术,相比传统的INT4(4位整数)量化&…

作者头像 李华
网站建设 2026/4/28 1:39:04

Kubernetes与Serverless的融合实践:从Knative到OpenFaaS的全面指南

Kubernetes与Serverless的融合实践:从Knative到OpenFaaS的全面指南 🔥 硬核开场 各位技术大佬们,今天咱们来聊聊Kubernetes与Serverless的融合。别跟我说你还在用传统的K8s部署方式,那都out了!Serverless的出现不是要取…

作者头像 李华
网站建设 2026/4/28 1:37:05

SQLite PRAGMA

SQLite PRAGMA SQLite 是一种轻量级的数据库管理系统,它以其简洁、高效和易于使用而著称。在 SQLite 中,PRAGMA 是一种特殊类型的 SQL 语句,用于获取数据库的内部信息或更改数据库的配置。本文将详细介绍 SQLite 中 PRAGMA 的用途、常用命令以及注意事项。 PRAGMA 的用途 …

作者头像 李华