【MySQL】聚合函数和分组聚合

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习计网、mysql和算法
✈️专栏:MySQL学习
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


目录

  • 一、聚合函数
      • 1.1 count函数
      • 1.2 sum函数
      • 1.3 avg函数
      • 1.4 max函数
      • 1.5 min函数
  • 二、分组聚合(group by + having)
      • 2.1 group by
      • 2.2 having
      • 2.3 having vs where

一、聚合函数

MySQL中,聚合函数用于对数据进行汇总和统计,并返回单个值作为结果

1.1 count函数

  • 用于计算指定列中非null值的行数。它通常用于统计符合特定条件的行数。

【语法】

select  count(distinct 列名) [as] 重命名 from 表名;
# as也可以不加
# 可以去重distinct统计

注意:

  • 如果使用count(*),它会统计表中所有行的数量,包括null值。

在这里插入图片描述

  • 如果使用count(列名),它会统计指定列中null值的行数

在这里插入图片描述

【使用案例】

假设有一个名为employees的表,包含员工的信息,如下所示:

在这里插入图片描述

  • 统计表中的总行数
select count(*) from employees;

在这里插入图片描述

  • 计算特定条件下的行数,比如部门为 HR的员工人数:
select count(*) as HR的员工人数 from employees where department='HR';

在这里插入图片描述

1.2 sum函数

  • 用于计算指定列的数值总和。它通常用于计算某个列中的数值总和,比如计算某一列的总销售额、总成绩等。

【语法】

select sum(distinct 列名) [as 重命名] from 表名;
  • 注意:如果指定的列包含null值,则 sum 函数会忽略null值。

在这里插入图片描述

任何数对null进行+-*/都是null,由此看出sum 函数确实忽略了null值。

【使用案例】

假设有一个名为sales的表,包含产品销售信息,表中数据如下:

在这里插入图片描述

  • 计算总销售额
select sum(amount)  from sales;

在这里插入图片描述

  • 计算特定条件下的销售总额,比如产品为A的销售总额
select sum(amount) A的总销售额 from sales where product='A';

在这里插入图片描述

  1. 计算出总销售额后再除以5
select sum(amount)/5 from sales;

在这里插入图片描述

1.3 avg函数

  • 用于计算指定列的平均值。它通常用于计算某一列的平均数,比如计算某产品的平均销售额、平均成绩等。

【语法】

select avg(distinct 列名) from 表名;

注意:如果指定的列包含null值,则avg函数会忽略null值。

【使用案例】

假设有一个名为grades的表,包含学生的考试成绩信息,表中数据如下:

在这里插入图片描述

  • 计算班级学生的平均值
# 写法一:
select avg(score) from grades;# 写法二:
select sum(score)/count(score) from grades;

在这里插入图片描述

1.4 max函数

  • 用于获取指定列中的最大值。它通常用于找到某一列中的最大值,比如找到某产品的最高价格、最高温度等。

【语法】

select max(列名) from 表名;

注意:如果指定的列包含null值,则max函数会忽略null

【使用案例】

假设有一个名为products的表,包含产品的价格信息,表中数据如下:

在这里插入图片描述

  • 找到价格的最高值
select max(price) from products;

在这里插入图片描述

  • 找到特定条件下的最大值,比如产品名称为B的价格
select max(price) from products where product='B';

在这里插入图片描述

1.5 min函数

  • 用于获取指定列中的最小值。它通常用于找到某一列中的最小值,比如找到某产品的最低价格、最低温度等。

基本语法如下:

【语法】

select min(列名) from 表名;

注意:如果指定的列包含null值,则min函数会忽略null值。

【使用案例】

假设有一个名为Student的表,包含学生的语数英成绩,表中数据如下:

在这里插入图片描述

  • 返回数学成绩最低分
select min(math) from Student;

在这里插入图片描述

  • 返回>70分以上的数学最低分
select min(math) from Student where math>70;

在这里插入图片描述

二、分组聚合(group by + having)

2.1 group by

  • 聚合函数常与group by结合使用,以便对数据进行分组聚合。(对数据进行分组统计)
  • 分组顾名思义就是将一组拆成了多个组,然后进行各自组内的统计。也可以看成将一张表拆成多个子表进行聚合统计。
  • 执行顺序:先分组,再聚合

【语法】

select group_name, 聚合fuc, ... from 表名 group by group_name, ...;

注意: group_name:除聚合函数括号里的列名以外,只有在group by后面出现的列名称,才能在select后面出现。

【使用案例】

  • 准备工作:导入scott_data.sql文件(来自oracle 9i的经典测试表)。该scott由三个表组成,分别是:

  • emp员工表(子表)

  • dept部门表(从表)

  • sakgrade工资等级表(主表)

在这里插入图片描述

这里重点看emp员工表(子表)即可

  • 通过员工表,显示每个部门的平均工资和最高工资
select deptno, avg(sal),max(sal) from emp group by deptno;

在这里插入图片描述

  • 显示每个部门的每种岗位的平均工资和最低工资
select deptno, job, avg(sal),min(sal) from emp group by deptno, job;

在这里插入图片描述

2.2 having

having的功能其实和where一样,当你需要在 分组后的结果集上应用条件过滤 时,可以配合having子句使用。

  • 显示平均工资低于2000的部门和它的平均工资
select deptno,avg(sal) 平均工资 from emp group by deptno having 平均工资<2000;

在这里插入图片描述

注意:where子句后面不能用重命名,而having可以。

在这里插入图片描述

  • SMITH员工不参与统计,显示平均工资低于2000的部门和它的平均工资
select deptno,job,avg(sal) 平均工资 from emp where ename!='SMITH' group by deptno,job having 平均工资<2000;

在这里插入图片描述

2.3 having vs where

sql查询中,wherehaving都是用于筛选数据的关键字,但它们有着不同的作用范围使用位置

  • 作用范围

    • where用于在对原始数据进行查询之前筛选行,它作用于未分组的数据
    • having用于在对数据进行聚合后筛选结果,它作用于已分组的数据。
  • 使用位置

    • where子句通常出现在sql查询的起始部分,用于过滤原始数据表的行。
    • having子句通常出现在group by子句之后,用于筛选分组后的结果。

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

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

相关文章

AttributeError: module ‘wandb‘ has no attribute ‘init‘解决办法

安装对应的库 pip install wandb -i https://pypi.tuna.tsinghua.edu.cn/simple拓展——wandb是什么模块&#xff0c;有什么作用 wandb是一个用于跟踪、可视化和协作机器学习项目的工具。它提供了许多功能&#xff0c;包括实时的指标跟踪、超参数调整、模型的可视化等&#x…

MongoDB 启动异常

Failed to start up WiredTiger under any compatibility version. 解决方案: 删除WiredTiger.lock 和 mongod.lock两个文件&#xff0c;在重新启动。回重新生成新的文件。

传输层 --- UDP

目录 1. 传输层是什么呢&#xff1f; 2. 再谈端口号 2.1. 端口号是什么 2.2. 协议号是什么 2.3. 认识知名端口号 2.4. 端口号的相关问题 2.4.1. 一个进程可以绑定多个端口号吗&#xff1f; 2.4.2. 一个端口号可以被多个进程绑定吗&#xff1f; 2.4.3. 为什么不使用P…

【学习】渗透测试有哪些重要性

随着信息技术的迅猛发展&#xff0c;网络安全问题日益凸显。渗透测试作为网络安全防御的重要手段之一&#xff0c;旨在模拟黑客攻击&#xff0c;发现并修复潜在的安全漏洞&#xff0c;提高网络系统的安全性。本文将介绍渗透测试的概念、重要性、实施步骤及实践案例&#xff0c;…

黑盒测试—场景测试法

场景测试法是一种通过模拟真实用户使用场景来验证软件系统的功能、性能和安全性的方法。 就是模拟多个实际场景会产生的多种结果&#xff0c;将实际场景进行组合&#xff0c;并推测组合后会产生的结果。 例题&#xff1a; 以ATM机存款业务&#xff0c;来设计场景法设计测试用例…

Makefile:make install的实现(十一)

1、make install的概念 在Linux环境下有些时候软件或者服务会通过源码安装&#xff0c;执行一些make、make install、make clean的指令。例如&#xff1a;redis make&#xff1a;编译所有的文件、生成一些动态库、静态库、可执行程序等等make install&#xff1a;通常会创建一个…

BTN7960B 电机驱动芯片 TO-263-7 智能车驱动器

BTN7960B是一种半桥式驱动器&#xff0c;适用于直流刷式电机。它具有高侧和低侧MOSFET驱动器&#xff0c;可以操控电机的正转和反转。此外&#xff0c;它还具有过流保护、欠压确定和热关断等功能&#xff0c;以保证体系在各种工作条件下的安全和安稳运转。 制造商: Infineon…

绿联 安装zfile,创建属于自己的网盘,支持直链分享

绿联 安装zfile&#xff0c;创建属于自己的网盘&#xff0c;支持直链分享 1、镜像 zhaojun1998/zfile:latest ZFile ZFile 是一个适用于个人的在线网盘(列目录)程序&#xff0c;可以将你各个存储类型的存储源&#xff0c;统一到一个网页中查看、预览、维护&#xff0c;再也不用…

C++ 标准库类型stackqueue

C/C总述&#xff1a;Study C/C-CSDN博客 栈与队列详解&#xff08;数据结构&#xff09;&#xff1a;栈与队列_禊月初三-CSDN博客 stack&#xff08;栈&#xff09; stack的常用函数 函数说明功能说明stack()构造空栈push(T& val)将元素val压入栈中size()返回栈中元素个…

面经分享(Flask,轻量级Web框架)

1. Flask的核心特点 a. 轻量级&#xff1a;核心简洁&#xff0c;只提供了基本的功能&#xff0c;其他高级功能可以通过插件或扩展来添加。 b. 灵活性&#xff1a;允许开发者选择适合自己项目的组件和工具&#xff0c;没有强制的项目结构和设计模式。 c. 易于扩展&#xff1a;提…

HTML:框架

案例&#xff1a; <frameset cols"5%,*" ><frame src"left_frame.html"><frame src"right_frame.html"> </frameset> 一、<frameset>标签 <frameset>标签&#xff1a;称为框架标记&#xff0c;将一个HTML…

mysql 判断一张表是否存在的方法

查询表是否存在 使用 SHOW TABLES SHOW TABLES LIKE %tbl_tabl%;结果: 查询 INFORMATION_SCHEMA // like 匹配 SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA test AND TABLE_NAME like %tbl%; // 完全匹配 SELECT TABLE_NAME FROM INFORMATION_SC…

element UI中设置图片的高度并支持PC和手机自适应

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、elementui 实现一个固定位置的Pagination&#xff08;分页&#xff09;组件 文章目录 系列文章目录…

《Java面试自救指南》(专题二)计算机网络

文章目录 力推的计网神课get请求和post请求的区别在浏览器网址输入一个url后直到浏览器显示页面的过程常用状态码session 和 cookie的区别TCP的三次握手和四次挥手七层OSI模型&#xff08;TCP/IP协议模型&#xff09;各种io模型的知识http协议和tcp协议的区别https和http的区别…

【Unity每日一记】如何让Sprite精灵图集的背景图层变成透明,方便切割

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

Pygame基础10-物理模拟

PyMunk PyMunk是一个模拟物理的库。 注意&#xff0c;PyMunk只是进行物理模拟&#xff0c;不包含可视化的功能。如果需要可视化&#xff0c;可使用pygame等库。 可用pip安装pymunk pip install pymunk pymunk中的概念&#xff1a; space&#xff1a; 物理空间。 包含gravity 模…

AJAX —— 学习(一)

目录 一、原生 AJAX &#xff08;一&#xff09;AJAX 介绍 1.理解 2.作用 3.最大的优势 4.应用例子 &#xff08;二&#xff09;XML 介绍 1.理解 2.作用 &#xff08;三&#xff09;AJAX 的特点 1.优点 2.缺点 二、HTTP 协议 &#xff08;一&#xff09;HTTP 介…

C语言中的结构体:揭秘数据的魔法盒

前言 在C语言的广阔天地中&#xff0c;结构体无疑是一颗璀璨的明珠。它就像是一个魔法盒&#xff0c;能够容纳各种不同类型的数据&#xff0c;并按我们的意愿进行组合和排列。那么&#xff0c;这个魔法盒究竟有何神奇之处呢&#xff1f;让我们一探究竟。 一、结构体的诞生&…

Java学习14(异常)

异常 概述 程序运行过程出错的情况就是异常。Java提供了异常处理机制&#xff0c;出现不正常情况的时候&#xff0c;就会把异常信息打印到控制台&#xff0c;供程序员参考修改。 这是Java打印的异常信息&#xff0c;这个信息是JVM打印的。 异常的作用&#xff1a; 增强程序的健…

可以写网易云的了!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 1枚程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 259篇原创内容-gzh 后台回复“前端工具”可获取开发工具&#xff0c;持续更新中…