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

news2024/11/17 20:27:52

在这里插入图片描述

👦个人主页:@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.coloradmin.cn/o/1571257.html

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

相关文章

渗透测试靶机----Raven-1

渗透测试靶机----Raven-1 开启靶机&#xff0c;登录窗&#xff0c;平平无奇 开扫&#xff1a; 先看看ip 这里发现192.168.217.166 发现相关服务端口&#xff0c;这里看到80&#xff0c;还是老样子&#xff0c;先80入手打开发现一个熟悉的站点&#xff1a; 这里可以使用漏扫工具…

解密项目管理工具数据安全:防火防盗,保密有招

相关数据显示&#xff0c;2021年中国数字经济规模总量达到45.5万亿元&#xff0c;占到国内GDP总量的39.8%。数字经济已经渗入我们工作生活的方方面面&#xff0c;项目管理工具就是其中之一&#xff0c;在数据安全备受重视的今天如何保证项目管理工具的数据安全性&#xff1f;Zo…

C-开发 visual Studio扩展插件介绍-格式化插件Xaml Styler、CSharpier介绍(扩展插件安装方法)

C#开发 visual Studio扩展插件介绍 扩展插件安装方法Xaml StylerCSharpier 提高C#开发效率常用的插件 扩展插件安装方法 菜单栏点击“扩展”→“管理扩展”。 打开扩展页面 右上角搜索需要安装的插件&#xff0c;然后点击下载 安装完成后&#xff0c;根据提示关闭VS进行安…

MPEG-1 详解

MPEG-1 详解 MPEG-1 详解特点MPEG-1 中的运动补偿与 B 帧的引入MPEG-1 vs H.261MPEG-1 视频数据流的结构MPEG-1 视频压缩模式MPEG-1 视频解码框图MPEG-1 音频编码模式MPEG-1 audio layer 1MPEG-1 audio layer 2MPEG-1 audio layer 3 MPEG-1 音频编码框图MPEG-1 音频解码框图参考…

大数据实验四-MapReduce编程实践

一&#xff0e;实验内容 MapReduce编程实践&#xff1a; 使用MapReduce实现多个文本文件中WordCount词频统计功能&#xff0c;实验编写Map处理逻辑、编写Reduce处理逻辑、编写main方法。 二&#xff0e;实验目的 1、通过实验掌握基本的MapReduce编程方法。 2、实现统计HDF…

使用阿里云试用Elasticsearch学习:1.2 基础入门——数据输入和输出

什么是文档? 在大多数应用中&#xff0c;多数实体或对象可以被序列化为包含键值对的 JSON 对象。 一个 键 可以是一个字段或字段的名称&#xff0c;一个 值 可以是一个字符串&#xff0c;一个数字&#xff0c;一个布尔值&#xff0c; 另一个对象&#xff0c;一些数组值&#…

Linux+HA高可用24X7的安全保证

一&#xff0e; 介绍作为服务器&#xff0c;需要提供一定的24X7的安全保证&#xff0c;这样可以防止关键节点的宕机引起系统的全面崩溃。利用OpenSource开源软件&#xff0c;完成系统的高可靠双机热备方案。基于linux的 HA软件可靠稳定&#xff0c;比使用商业版本的HA软件降低成…

中国智慧城管哪家做的好?

智慧城市管理综合执法系统建立全市统一的法律法规、裁量基准、执法事项、执法文书和基础信息库&#xff0c;实现从获取线索、立案、调查、处理到结案全过程的信息化和文书制作的智能化。全面支持移动执法办案&#xff0c;提高执法效率。 技术架构&#xff1a; 微服务javasprin…

arm开发板移植工具mkfs.ext4

文章目录 一、前言二、手动安装e2fsprogs1、下载源码包2、解压源码3、配置4、编译5、安装 三、移植四、验证五、总结 一、前言 在buildroot菜单中&#xff0c;可以通过勾选e2fsprogs工具来安装mkfs.ext4工具&#xff1a; Target packages -> Filesystem and flash utilit…

【Python】免费的图片/图标网站

专栏文章索引&#xff1a;Python 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 这里是我收集的几个免费的图片/图标网站&#xff1a; iconfont-阿里巴巴矢量图标库icon&#xff08;.ico&#xff09;INCONFINDER&#xff08;.ico&#xff09;

力扣刷题 二叉树的迭代遍历

题干 给你二叉树的根节点 root &#xff0c;返回它节点值的 前中后序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root […

智慧农业新篇章:数字乡村引领农业现代化

随着信息技术的飞速发展&#xff0c;数字乡村正成为引领农业现代化的重要力量。智慧农业作为数字乡村的核心内容&#xff0c;以其高效、精准、可持续的特点&#xff0c;为农业现代化开辟了新篇章。本文将从智慧农业的内涵与特点、数字乡村在农业现代化中的引领作用、智慧农业发…

机器学习第33周周报Airformer

文章目录 week33 AirFormer摘要Abstract一、论文的前置知识1. 多头注意力机制&#xff08;MSA&#xff09;2. 具有潜变量的变分模型 二、文献阅读1. 题目2. abstract3. 问题与模型阐述3.1 问题定义3.2 模型概述3.3 跨空间MSA&#xff08;DS-MSA&#xff09;3.4 时间相关MSA&…

小程序如何设置余额充值和消费功能

小程序中设置余额充值和消费功能非常重要的&#xff0c;通过让客户在小程序中进行余额充值&#xff0c;不仅可以提高用户粘性&#xff0c;还可以促进消费&#xff0c;增加用户忠诚度。以下是如何在小程序中设置余额充值和消费功能的步骤&#xff1a; 1. **设计充值入口**&…

Cisco Nexus 9000v Switch, NX-OS Release 10.4(3)F

Cisco Nexus 9000v Switch, NX-OS Release 10.4(3)F 用于网络原型设计和学习研究的虚拟化数据中心交换机 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-nexus-9000v/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…

【软件测试】测试常见知识点汇总

测试常见知识点汇总 一、什么是测试1.1 测试和调试的区别1.2 什么是需求1.2.1 用户需求1.2.2 软件需求 1.3 测试用例要素1.4 软件的生命周期及各阶段概述1.5 开发模型和测试模型&#xff08;记住特点和适用场景&#xff09;1.5.1 开发模型1.5.1.1 瀑布模型&#xff08;自上而下…

微信小程序生命周期管理:从数据初始化到事件绑定

作为一个独立的应用开发平台,微信小程序提供了自己的生命周期机制,与我们熟悉的Vue.js框架有一些差异。掌握小程序生命周期的特点和使用技巧,对于开发高质量的小程序应用至关重要。深入理解和掌握小程序生命周期的使用技巧,将有助于我们构建出更加健壮和可维护的小程序应用。 小…

内网穿透的应用-如何在Android Termux上部署MySQL数据库并实现无公网IP远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

tesseract-ocr一站式安装与使用

目录 前言 安装tesseract-ocr 添加环境变量 1、在path中添加 2、在系統變量中添加 3、验证是否添加成功 添加语言包 更多语言包下载 示例程序 前言 如果你遇到了&#xff1a;make sure the TESSDATA_PREFIX Failed loading language \‘chi_sim 那么就是语言包缺少这个&#xf…

地质地貌卫星影像集锦(三 矿产资源篇)

1. 元古代沉积岩的抬升 这个地区位于Leigh Creek中部&#xff0c;距离澳大利亚南部的阿德莱德约500km&#xff0c;弗林德斯山脉的北面是Gawler克拉通。弗林德斯山脉是由元古代沉积岩抬升后形成的块体&#xff0c;在其之下的是寒武纪的岩石&#xff0c;它座落在距阿德莱德北…