【MySQL基础-9】深入理解MySQL中的聚合函数

在数据库操作中,聚合函数是一类非常重要的函数,它们用于对一组值执行计算并返回单个值。MySQL提供了多种聚合函数,如COUNTSUMAVGMINMAX等。这些函数在数据分析和报表生成中扮演着关键角色。本文将深入探讨这些聚合函数的使用方法、注意事项以及一些高级技巧。

1. 聚合函数概述

聚合函数主要用于对一组值进行计算,并返回一个单一的值。常见的聚合函数包括:

  • COUNT():计算行数。
  • SUM():计算数值列的总和。
  • AVG():计算数值列的平均值。
  • MIN():找出数值列的最小值。
  • MAX():找出数值列的最大值。

这些函数通常与GROUP BY子句一起使用,以便对分组后的数据进行聚合计算。

2. 常用聚合函数详解

2.1 COUNT()

COUNT()函数用于计算表中的行数。它可以用于计算所有行或满足特定条件的行。

-- 计算表中的总行数
SELECT COUNT(*) FROM employees;-- 计算特定条件下的行数
SELECT COUNT(*) FROM employees WHERE department = 'Sales';

2.2 SUM()

SUM()函数用于计算数值列的总和。

-- 计算所有员工的工资总和
SELECT SUM(salary) FROM employees;-- 计算特定部门的工资总和
SELECT SUM(salary) FROM employees WHERE department = 'Engineering';

注意: SUM函数用于求和,只能用于数字类型,字符类型的统计结果为0,日期类型统计结果是毫秒数相加。

2.3 AVG()

AVG()函数用于计算数值列的平均值。

-- 计算所有员工的平均工资
SELECT AVG(salary) FROM employees;-- 计算特定部门的平均工资
SELECT AVG(salary) FROM employees WHERE department = 'Marketing';

2.4 MIN()

MIN()函数用于找出数值列的最小值。

-- 找出所有员工中的最低工资
SELECT MIN(salary) FROM employees;-- 找出特定部门的最低工资
SELECT MIN(salary) FROM employees WHERE department = 'HR';

2.5 MAX()

MAX()函数用于找出数值列的最大值。

-- 找出所有员工中的最高工资
SELECT MAX(salary) FROM employees;-- 找出特定部门的最高工资
SELECT MAX(salary) FROM employees WHERE department = 'Finance';

3. 聚合函数与GROUP BY

GROUP BY子句用于将结果集按一个或多个列进行分组。聚合函数通常与GROUP BY一起使用,以便对每个分组进行聚合计算。

-- 按部门分组,计算每个部门的员工数
SELECT department, COUNT(*) FROM employees GROUP BY department;-- 按部门分组,计算每个部门的平均工资
SELECT department, AVG(salary) FROM employees GROUP BY department;

4. 聚合函数与HAVING

HAVING子句用于过滤分组后的结果集。与WHERE子句不同,HAVING可以用于过滤聚合函数的结果。

-- 找出平均工资大于5000的部门
SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;-- 找出员工数超过10人的部门
SELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 10;

5. 聚合函数的注意事项

  • NULL值处理:聚合函数通常忽略NULL值。例如,COUNT(column_name)不会计算NULL值。
  • 性能考虑:在大数据集上使用聚合函数可能会影响性能,尤其是在没有适当索引的情况下。
  • 数据类型:确保聚合函数应用于正确的数据类型。例如,SUM()AVG()应应用于数值列。

6. 高级技巧

6.1 使用DISTINCT

可以在聚合函数中使用DISTINCT关键字,以便只对唯一值进行计算。

-- 计算不同部门的数量
SELECT COUNT(DISTINCT department) FROM employees;-- 计算不同工资的总和
SELECT SUM(DISTINCT salary) FROM employees;

6.2 嵌套聚合函数

在某些情况下,可以嵌套使用聚合函数。

-- 计算每个部门的平均工资,然后找出这些平均工资中的最大值
SELECT MAX(avg_salary) FROM (SELECT AVG(salary) AS avg_salary FROM employees GROUP BY department) AS dept_avg;

6.3 使用窗口函数

MySQL 8.0及以上版本支持窗口函数,可以在不分组的情况下进行聚合计算。

-- 计算每个员工的工资以及所在部门的平均工资
SELECT employee_id, salary, AVG(salary) OVER (PARTITION BY department) AS avg_department_salary FROM employees;

7. 总结

聚合函数是MySQL中非常强大的工具,能够帮助我们轻松地对数据进行汇总和分析。通过结合GROUP BYHAVING子句,我们可以实现更复杂的数据分组和过滤操作。掌握这些函数的使用方法和注意事项,将极大地提升我们在数据库操作中的效率和灵活性。

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

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

相关文章

windows版本的时序数据库TDengine安装以及可视化工具

了解时序数据库TDengine,可以点击官方文档进行详细查阅 安装步骤 首先找到自己需要下载的版本,这边我暂时只写windows版本的安装 首先我们需要点开官网,找到发布历史,目前TDengine的windows版本只更新到3.0.7.1,我们…

Web测试

7、Web安全测试概述 黑客技术的发展历程 黑客基本涵义是指一个拥有熟练电脑技术的人,但大部分的媒体习惯将“黑客”指作电脑侵入者。 黑客技术的发展 在早期,黑客攻击的目标以系统软件居多。早期互联网Web并非主流应用,而且防火墙技术还没有…

华为OD机试 - 最长的完全交替连续方波信号(Java 2023 B卷 200分)

题目描述 给定一串方波信号,要求找出其中最长的完全连续交替方波信号并输出。如果有多个相同长度的交替方波信号,输出任意一个即可。方波信号的高位用1标识,低位用0标识。 说明: 一个完整的信号一定以0开始并以0结尾,即010是一个完整的信号,但101,1010,0101不是。输入的…

游戏引擎学习第163天

我们可以在资源处理器中使用库 因为我们的资源处理器并不是游戏的一部分,所以它可以使用库。我说过我不介意让它使用库,而我提到这个的原因是,今天我们确实有一个选择——可以使用库。 生成字体位图的两种方式:求助于 Windows 或…

7、什么是死锁,如何避免死锁?【高频】

(1)什么是死锁: 死锁 是指在两个或多个进程的执行时,每个进程都持有资源 并 等待其他进程 释放 它所需的资源,如果此时所有的进程一直占有资源而不释放,就会陷入互相等待的一种僵局状态。 死锁只有同时满足…

Compose 实践与探索十四 —— 自定义布局

自定义布局在 Compose 中相对于原生的需求已经小了很多,先讲二者在本质上的逻辑,再说它们的使用场景,两相对比就知道为什么 Compose 中的自定义布局的需求较小了。 原生是在 xml 布局文件不太方便或者无法满足需求时才会在代码中通过自定义 …

【C++】:C++11详解 —— 入门基础

目录 C11简介 统一的列表初始化 1.初始化范围扩展 2.禁止窄化转换(Narrowing Conversion) 3.解决“最令人烦恼的解析”(Most Vexing Parse) 4.动态数组初始化 5. 直接初始化返回值 总结 声明 1.auto 类型推导 2. declty…

oracle删除表中重复数据

需求: 删除wfd_procs_nodes_rwk表中,huser_id、dnode_id、rwk_name字段值相同的记录,如果有多条,只保留一条。 SQL: DELETE FROM wfd_procs_nodes_rwk t WHERE t.rowid > (SELECT MIN(t1.rowid)FROM wfd_procs_n…

ESP32学习 -从STM32工程架构进阶到ESP32架构

ESP32与STM32项目文件结构对比解析 以下是对你提供的ESP32项目文件结构的详细解释,并与STM32(以STM32CubeIDE为例)的常见结构进行对比,帮助你理解两者的差异: 1. ESP32项目文件解析 文件/目录作用STM32对应或差异set…

整形在内存中的存储(例题逐个解析)

目录 一.相关知识点 1.截断: 2.整形提升: 3.如何 截断,整型提升? (1)负数 (2)正数 (3)无符号整型,高位补0 注意:提升后得到的…

HTML中滚动加载的实现

设置div的overflow属性,可以使得该div具有滚动效果,下面以div中包含的是table来举例。 当table的元素较多,以至于超出div的显示范围的话,观察下该div元素的以下3个属性: clientHeight是div的显示高度,scrol…

Netty基础—7.Netty实现消息推送服务二

大纲 1.Netty实现HTTP服务器 2.Netty实现WebSocket 3.Netty实现的消息推送系统 (1)基于WebSocket的消息推送系统说明 (2)消息推送系统的PushServer (3)消息推送系统的连接管理封装 (4)消息推送系统的ping-pong探测 (5)消息推送系统的全连接推送 (6)消息推送系统的HTTP…

人工智能助力家庭机器人:从清洁到陪伴的智能转型

引言:家庭机器人进入智能时代 过去,家庭机器人只是简单的“工具”,主要用于扫地、拖地、擦窗等单一任务。然而,随着人工智能(AI)技术的迅猛发展,家庭机器人正经历从“机械助手”向“智能管家”甚…

ssh转发笔记

工作中又学到了,大脑转不过来 现有主机A,主机B,主机C A能访问B,B能访问C,A不能访问C C上80端口有个服务,现在A想访问这个服务,领导让用ssh转发,研究半天没找到理想的语句&#xf…

清晰易懂的Miniconda安装教程

小白也能看懂的 Miniconda 安装教程 Miniconda 是一个轻量级的 Python 环境管理工具,适合初学者快速搭建 Python 开发环境。本教程将手把手教你如何在 Windows 系统上安装 Miniconda,并配置基础环境,确保你能够顺利使用 Python 进行开发。即…

Flume详解——介绍、部署与使用

1. Flume 简介 Apache Flume 是一个专门用于高效地 收集、聚合、传输 大量日志数据的 分布式、可靠 的系统。它特别擅长将数据从各种数据源(如日志文件、消息队列等)传输到 HDFS、HBase、Kafka 等大数据存储系统。 特点: 可扩展&#xff1…

破解企业内部盗版软件管理难题的技术方案

引言:盗版软件——企业数字化转型的“隐形地雷” 据BSA《全球软件调查报告》显示,37%的企业存在员工私自安装盗版软件的行为,由此引发的法律诉讼、数据泄露及罚款风险年均增长28%。LMT基于“预防-检测-治理”三位一体技术框架,为…

Spring源码解析

第一讲 容器接口 BeanFactory和ApplicationContext接口的具体继承关系: ApplicationContext 间接继承了BeanFactory BeanFactory是父接口ApplicationContext是子接口,里面一些功能调用了BeanFactory BeanFactory的功能 表面上只有 getBean&#xff0…

Django Rest Framework 创建纯净版Django项目部署DRF

描述创建纯净版的Django项目和 Django Rest Framework 环境的部署 一、创建Django项目 1. 环境说明 操作系统 Windows11python版本 3.9.13Django版本 V4.2.202. 操作步骤(在Pycharm中操作) 创建Python项目drfStudy、虚拟环境 ​虚拟环境中安装 jdangopip install django==4.…

图解AUTOSAR_CP_NetworkManagementInterface

AUTOSAR 网络管理接口(Nm)详解 AUTOSAR 网络管理接口规范与实现指南 目录 1. 概述 1.1. 网络管理接口的作用1.2. 网络管理接口的特点 2. 网络管理接口架构 2.1. 架构概览2.2. 模块交互关系 3. 网络管理状态机 3.1. 状态定义3.2. 状态转换 4. 协调算法 4.1. 协调关闭流程4.2. 同…