聚合函数理解

news2025/1/5 8:25:06

聚合函数(Aggregate Functions)是 SQL 中用于对一组值执行计算并返回单个值的函数。它们常用于数据分析和统计,能够帮助我们快速获取数据的摘要信息。以下是常见的 Oracle 数据库聚合函数及其使用场景和用法。

常见的聚合函数

  1. COUNT()
  2. SUM()
  3. AVG()
  4. MIN()
  5. MAX()

1. COUNT()

-- 统计所有员工的数量
SELECT COUNT(*) AS total_employees FROM employees;

-- 统计有电子邮件地址的员工数量
SELECT COUNT(email) AS employees_with_email FROM employees;

2. SUM()

-- 计算所有订单的总金额
SELECT SUM(amount) AS total_amount FROM orders;

-- 按部门计算每个部门的总薪水
SELECT department_id, SUM(salary) AS total_salary
FROM employees
GROUP BY department_id;

3. AVG()

-- 计算所有员工的平均薪水
SELECT AVG(salary) AS average_salary FROM employees;

-- 按部门计算每个部门的平均薪水
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;

4. MIN()

-- 找出所有员工中最低的薪水
SELECT MIN(salary) AS min_salary FROM employees;

-- 按部门找出每个部门中最早的入职日期
SELECT department_id, MIN(hire_date) AS earliest_hire_date
FROM employees
GROUP BY department_id;

5. MAX()

-- 找出所有员工中最高的薪水
SELECT MAX(salary) AS max_salary FROM employees;

-- 按部门找出每个部门中最晚的入职日期
SELECT department_id, MAX(hire_date) AS latest_hire_date
FROM employees
GROUP BY department_id;

复杂示例

假设我们有一个 orders 表,包含以下列:

  • order_id (订单ID)
  • customer_id (客户ID)
  • order_date (订单日期)
  • amount (订单金额)

开窗函数不会改变本身应该查询出来的记录条数,只会改变使用开窗函数的那一个字段的值,就相当于是一个变量

我们使用聚合函数  更多的其实是想要删除重复值  重复的记录我们想要更直观的表现

SQL> select * from orders;

ORDER_ID	     CUSTOMER_ID	 AMOUNT ORDER_DAT
-------------------- --------------- ---------- ---------
ord01		     cust01		     15 01-JAN-25
ord01		     cust01		     20 01-JAN-25
ord01		     cust02		     90 01-JAN-25
ord01		     cust03		   1900 01-JAN-25
ord02		     cust01		     76 01-JAN-25
ord02		     cust04		     12 01-JAN-25
ord03		     cust04		     45 01-JAN-25
ord03		     cust03		     45 01-JAN-25
ord03		     cust03		     45 01-JAN-25
ord04		     cust04		   1100 01-JAN-25
ord04		     cust04		    900 01-JAN-25
ord04		     cust01		   1000 01-JAN-25

12 rows selected.



-----这样的查询sum的用法基本属于没有意义,逻辑是先以order_id分组,再以CUSTOMER_ID分组
--再以AMOUNT分组,如果三个字段的值都一直就会合并成只有一条记录,那么sum就只有45 而不是135
SQL> SELECT order_id,customer_id,amount,SUM(amount) from orders group by order_id,customer_id,amount;

ORDER_ID	     CUSTOMER_ID	 AMOUNT SUM(AMOUNT)
-------------------- --------------- ---------- -----------
ord01		     cust01		     20 	 20
ord01		     cust01		     15 	 15
ord01		     cust02		     90 	 90
ord01		     cust03		   1900      1900
ord04		     cust04		    900 	900
ord04		     cust01		   1000      1000
ord02		     cust01		     76 	 76
ord03		     cust04		     45 	 45
ord04		     cust04		   1100      1100
ord02		     cust04		     12 	 12
ord03		     cust03		     45 	 90

11 rows selected.


-------如果想知道同一个customer_id下的amount总和  还是得用开窗函数

SQL> SELECT order_id,customer_id,amount,
  2  SUM(amount) OVER (PARTITION BY customer_id )AS cumulative_amount
  3  from orders;

ORDER_ID	     CUSTOMER_ID	 AMOUNT CUMULATIVE_AMOUNT
-------------------- --------------- ---------- -----------------
ord01		     cust01		     20 	     1111
ord02		     cust01		     76 	     1111
ord04		     cust01		   1000 	     1111
ord01		     cust01		     15 	     1111
ord01		     cust02		     90 	       90
ord03		     cust03		     45 	     1990
ord01		     cust03		   1900 	     1990
ord03		     cust03		     45 	     1990
ord04		     cust04		    900 	     2057
ord04		     cust04		   1100 	     2057
ord03		     cust04		     45 	     2057
ord02		     cust04		     12 	     2057

12 rows selected.



-----以客户为分组,查看客户下过订单的次数,每个客户的订单总金额,客户订单的平均金额,最大金额  最小金额
SQL> SELECT customer_id,COUNT(*) AS order_count,SUM(amount) AS total_amount,AVG(amount) AS avg_amount,
  2  MIN(amount) AS min_amount,MAX(amount) AS max_amount FROM  orders GROUP BY customer_id;

CUSTOMER_ID	ORDER_COUNT TOTAL_AMOUNT AVG_AMOUNT MIN_AMOUNT MAX_AMOUNT
--------------- ----------- ------------ ---------- ---------- ----------
cust01			  4	    1111     277.75	    15	     1000
cust02			  1	      90	 90	        90	     90
cust04			  4	    2057     514.25	    12	     1100
cust03			  3	    1990 663.333333	    45	     1900

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2269705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数势科技:解锁数据分析 Agent 的智能密码(14/30)

一、数势科技引领数据分析变革 在当今数字化浪潮中,数据已然成为企业的核心资产,而数据分析则是挖掘这一资产价值的关键钥匙。数势科技,作为数据智能领域的领军者,以其前沿的技术与创新的产品,为企业开启了高效数据分析…

[卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析

目录 [卫星遥感] 解密卫星目标跟踪:挑战与突破的深度剖析 1. 卫星目标跟踪的核心挑战 1.1 目标的高速与不确定性 1.2 卫星传感器的局限性 1.3 数据处理与融合问题 1.4 大尺度与实时性要求 2. 当前卫星目标跟踪的主流技术 2.1 卡尔曼滤波(Kalman …

骑行解压:身心的奇妙之旅,VELO Angel Revo坐垫

在快节奏的都市生活中,骑行不仅是一种健康的生活方式,更是一种心灵的释放。从心理生理学的角度来看,骑行能够促使身体分泌内啡肽,带来愉悦感,同时,它还能转移注意力,缓解焦虑。在这场身心的奇妙…

Agent系列:AppAgent v2-屏幕智能Agent(详解版)

引言 简介 方法 Agent 框架 Agent 交互 探索阶段 部署阶段 文档生成 高级功能 实验结果 总结 局限性 未来工作 1. 引言 大语言模型(LLM)如 ChatGPT 和 GPT-4 显著提升了自然语言处理能力,并且推动了智能体在自主决策中的应用。…

高等数学学习笔记 ☞ 无穷小与无穷大

1. 无穷小 1. 定义:若函数当或时的极限为零,那么称函数是当或时的无穷小。 备注: ①:无穷小描述的是自变量的变化过程中,函数值的变化趋势,绝不能认为无穷小是一个很小很小的数。 ②:说无穷小时…

【网络安全实验室】SQL注入实战详情

如果额头终将刻上皱纹,你只能做到,不让皱纹刻在你的心上 1.最简单的SQL注入 查看源代码,登录名为admin 最简单的SQL注入,登录名写入一个常规的注入语句: 密码随便填,验证码填正确的,点击登录…

Hive性能调优考量

Hive作为大数据领域常见的数据仓库组件,在设计和开发阶段需要注意效率。影响Hive效率的不仅仅是数据量过大,数据倾斜、job(小文件过多)或者磁盘I/O过多、MapReduce分配不合理等因素都会对Hive的效率有影响。对Hive的调优可以从架构…

在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示

在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示 参考文章源码下载地址一、SDL2的创建、初始化、退出二、系统基本Tick、彩屏刷新、按键事件三、彩屏获取与设置颜色四、彩屏填充颜色及清屏五、彩屏显示中文和英文字符串六、彩屏显示数字七、彩屏初始化八、主函数测…

ESLint+Prettier的配置

ESLintPrettier的配置 安装插件 ​​​​​​ 在settings.json中写下配置 {// tab自动转换标签"emmet.triggerExpansionOnTab": true,"workbench.colorTheme": "Default Dark","editor.tabSize": 2,"editor.fontSize": …

Springboot使用RabbitMQ实现关闭超时订单的一个简单示例

1.maven中引入rabbitmq的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 2.application.yml中进行rabbitmq相关配置&#xff1a; # rabbit…

复杂对象的创建与组装 - 建造者模式(Builder Pattern)

建造者模式&#xff08;Builder Pattern&#xff09; 建造者模式&#xff08;Builder Pattern&#xff09;建造者模式&#xff08;Builder Pattern&#xff09;概述建造者模式结构图代码 talk is cheap&#xff0c; show you my code总结 建造者模式&#xff08;Builder Patter…

云计算课程报告实验-WordCount算法实验 过程记录

内容描述 本实验指导书通过在华为鲲鹏上&#xff0c;编译运行WordCount程序。完成实验操作后&#xff0c;读者会掌握简单的程序编写&#xff0c;如WordCount中的getWords、countWords、treeMerge。 实验环境 华为鲲鹏云主机、openEuler 20.03操作系统&#xff1b;安装mpich-3…

springboot533图书管理系统(论文+源码)_kaic

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;图书信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

【服务器开发及部署】code-server 显示git graph

在开发一些linux上的内容的时候进程需要在开发机和生产部署上花费大量的时间。 为了解决上述问题,我们今天介绍一款在服务上开发的思路 git + code server + 宝塔 其中需要处理一些问题,此处都有交代 步骤 安装宝塔安装code-server配置插件配置浏览器处理的问题 git版本过低,…

【游戏设计原理】41 - 游戏的核心

1. 如何理解&#xff1f; 这条原理主要在讲述“游戏核心”这一概念的重要性及其在游戏开发中的作用。游戏的核心是指决定游戏整体玩法和体验的核心元素&#xff0c;它通常是游戏的主要机制、目标或动作方式。理解这一原理时&#xff0c;我们可以从以下几个层面来考虑&#xff…

win11 vs2022 opencv 4.10 camshift示例程序运行

记录win11 vs2022 opencv 4.10下 camshift等示例程序的单步debug启动方式&#xff0c;方便了解源码。 debug版本编译通过&#xff0c;但运行时报出大量日志信息(部分dll加载FAILED后会自动找兼容dll)。但也能继续运行&#xff0c;效果如下 release版本可以直接运行&#xff0…

数据结构漫游记:初识栈(stack)

嘿&#xff0c;各位技术潮人&#xff01;好久不见甚是想念。生活就像一场奇妙冒险&#xff0c;而编程就是那把超酷的万能钥匙。此刻&#xff0c;阳光洒在键盘上&#xff0c;灵感在指尖跳跃&#xff0c;让我们抛开一切束缚&#xff0c;给平淡日子加点料&#xff0c;注入满满的pa…

人工智能知识分享第五天-正则化.损失函数案例

正则化 欠拟合与过拟合 过拟合&#xff1a;一个假设 在训练数据上能够获得比其他假设更好的拟合&#xff0c; 但是在测试数据集上却不能很好地拟合数据 (体现在准确率下降)&#xff0c;此时认为这个假设出现了过拟合的现象。(模型过于复杂) 欠拟合&#xff1a;一个假设 在训…

CSS2笔记

一、CSS基础 1.CSS简介 2.CSS的编写位置 2.1 行内样式 2.2 内部样式 2.3 外部样式 3.样式表的优先级 4.CSS语法规范 5.CSS代码风格 二、CSS选择器 1.CSS基本选择器 通配选择器元素选择器类选择器id选择器 1.1 通配选择器 1.2 元素选择器 1.3 类选择器 1.4 ID选择器 1.5 基…

如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程

简介 在本教程中&#xff0c;我们将学习如何优化 Apache 以应对高流量网站。 当运行高流量网站时&#xff0c;确保你的 Apache Web 服务器得到优化对于有效处理负载至关重要。在本指南中&#xff0c;我们将介绍配置 Apache 以提高性能和可扩展性的基本技巧。 为高流量网站优…