【MySQL — 数据库基础】深入解析MySQL的聚合查询

news2025/3/31 5:47:54

      


1. 聚合查询 


1.1 聚合函数 


函数说明
COUNT ( [DISTINCT] expr)返回查询到的数据的数量( 行数 )
SUM ( [DISTINCT] expr)返回查询到的数据的总和,不是数字没有意义
AVG ( [DISTINCT] expr)返回查询到的数据的平均值,不是数字没有意义
MAX( [DISTINCT] expr)返回查询到的数据的最大值,不是数字没有意义
MIN ( [DISTINCT] expr)返回查询到的数据的最小值,不是数字没有意义

注意: null 值在使用聚合函数时,大部分会被忽略掉 ;


【MySQL — 数据库增删改查操作】深入解析MySQL的 Retrieve 检索操作



1.2 COUNT 行数查询 


功能:计算行数。可以计算所有行的数量,也可以根据条件计算某列非NULL值的数量。


    语法:  

  SELECT COUNT(column_name) FROM table_name WHERE condition;


    COUNT  使用案例      

select count(*) from exam; 

+----------+
| count(*) |
+----------+
|        7 |
+----------+

-- count() 用于查询 exam 的行数

-- 先执行 select * from exam , 再根据上述的结果, 执行 count

 select count(name) from exam; 

+-------------+
| count(name) |
+-------------+
|           7 |
+-------------+

 -- * 换成 name 效果相同

select count (name) from exam;  
ERROR 1630 (42000)

-- count(name) 是连在一起的, 不能加空格


-- 如果数据中包含了null , 可能对上述count产生影响

insert into exam values(null ,'唐三藏', 67 , 98 , 56);

 --插入 id 列为 null 的第一列数据

select count(*) from exam;  

+----------+
| count(*) |
+----------+
|        8 |
+----------+

-- 使用 count(*) 不会影响结果

select count(id) from exam;

+-----------+
| count(id) |
+-----------+
|         7 |
+-----------+

-- id  列有空值, 使用 count(列名) 对结果有影响
-- 其他列无空值, 使用 count(列名) 对结果无影响

select count(distinct name) from exam; 

+----------------------+
| count(distinct name) |
+----------------------+
|                    7 |
+----------------------+

-- 对 name 进行去重查询

1.3 SUM 总和查询


功能:计算某列的总和。仅适用于数值类型的列。


    语法     

  SELECT SUM(column_name) FROM table_name WHERE condition;


    SUM 使用案例       

select sum(English) from exam;
+--------------+
| sum(English) |
+--------------+
|        443.0 |
+--------------+
1 row in set (0.01 sec)

-- 确保进行求和的列是数字


select sum(name) from exam;
+-----------+
| sum(name) |
+-----------+
|         0 |
+-----------+
1 row in set, 7 warnings (0.00 sec)

-- 对 name 求和,虽然不会报错,但是会根据求和列数给出警告

show warnings;
+---------+------+-----------------------------------------------+
| Level   | Code | Message                                       |
+---------+------+-----------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '唐三藏'    |
| Warning | 1292 | Truncated incorrect DOUBLE value: '孙悟空'    |
| Warning | 1292 | Truncated incorrect DOUBLE value: '猪悟能'    |
| Warning | 1292 | Truncated incorrect DOUBLE value: '曹孟德'    |
| Warning | 1292 | Truncated incorrect DOUBLE value: '刘玄德'    |
| Warning | 1292 | Truncated incorrect DOUBLE value: '孙权'      |
| Warning | 1292 | Truncated incorrect DOUBLE value: '宋公明'    |
+---------+------+-----------------------------------------------+
7 rows in set (0.00 sec)

-- 数据库在进行求和时,会把求和的列的值尝试转换成 double

-- 如果字符串前半部分是数字,就能把前半部分 Truncated , 并且转换成 double

-- 原则上不应该针对字符串进行求和操作,即使字符串有数字,也不一定可以进行算术运算

-- null 和任意数值进行计算,结果都为 null ,但是 sum 比较特殊,遇到 null 直接跳过

-- 如果有同学缺考,sum 的机制就不会让 null 参与运算,导致总成绩也为 null


select sum(Chinese + Math + English ) from exam;
+--------------------------------+
| sum(Chinese + Math + English ) |
+--------------------------------+
|                         1548.0 |
+--------------------------------+
1 row in set (0.00 sec)


-- sum 可以针对多列中所有的数字进行求和,也可以在求和后面添加筛选条件

1.4 AVG 平均数查询 


功能:计算某列的平均值。仅适用于数值类型的列。


    语法    

  SELECT AVG(column_name) FROM table_name WHERE condition;


    AVG 使用案例       

select avg(Chinese) from exam;
+--------------+
| avg(Chinese) |
+--------------+
|     74.85714 |
+--------------+
1 row in set (0.00 sec)

1.5 MAX 最大值查询 


功能:返回某列的最大值。


    语法    

  SELECT MAX(column_name) FROM table_name WHERE condition;

 


    SUM 使用案例       

select max(Chinese) from exam;
+--------------+
| max(Chinese) |
+--------------+
|         88.0 |
+--------------+
1 row in set (0.00 sec)

1.6 MIN 最小值查询    


select min(Chinese) from exam;
+--------------+
| min(Chinese) |
+--------------+
|         55.0 |
+--------------+
1 row in set (0.00 sec)

1.7 GROUP BY 分组查询 


 group by 是一个更复杂的聚合函数;使用group by指定一个列,就会把列的值相同的行归到一组中,分完组之后,还可以针对每个组,分别进行聚合查询 


    语法    

select 分组列 , 聚合函数  from 表名  group by 分组列  having  分组之后的条件

    构造数据    

create table emp( id int ,name varchar(20) , role varchar(20) , salary int) ;

 insert into emp values
(1, '张三', '程序员'  ,  10000  ),
(2, '李四', '程序员'  ,  11000  ), 
(3, '王五', '程序员'  ,  12000  ),
(4, '赵六', '产品经理',  8000   ),
(5, '田七', '产品经理',  9000   ),
(6, '周八', '老板'    ,  100000 );



  •     简单分组查询    
select role , count(id) from emp group by role;

-- select role   表示根据 emp 的 role 进行分组查询

-- select role , count(id) 表示计算相同 role 的行数


select role , avg(salary), max(salary), min(salary) from emp group by role ;

-- 表示根据 role 进行分组,分组后计算相同 role 的平均工资,最大薪资,最小薪资


  •      搭配排序使用分组查询     
select role , avg(salary) from emp group by role order by avg(salary) desc;

-- 根据 role 进行分组查询,对各个分组的平均薪资作降序排序


  •      搭配条件筛选进行分组查询     

select role , avg(salary) from emp where name != '张三' group by role ;

-- 分组前筛选掉名字为张三的记录,然后根据 role 进行分组,分组后求薪资平均值

select role , avg(salary) as AvgSalary from emp where name != '张三' group by role ;

-- 定义别名


分组之后的添加筛选条件 


select role , avg(salary) from emp where name != '张三' group by role having avg(salary) < 50000;

-- 每个岗位 role 查询平均薪资,先筛选张三的记录,然后排除平均薪资高于 5w 的记录



   

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

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

相关文章

windows平台本地部署DeepSeek大模型+Open WebUI网页界面(可以离线使用)

环境准备: 确定部署方案请参考:DeepSeek-R1系列(1.5b/7b/8b/32b/70b/761b)大模型部署需要什么硬件条件-CSDN博客 根据本人电脑配置:windows11 + i9-13900HX+RTX4060+DDR5 5600 32G内存 确定部署方案:DeepSeek-R1:7b + Ollama + Open WebUI 1. 安装 Ollama Ollama 是一…

港中文腾讯提出可穿戴3D资产生成方法BAG,可自动生成服装和配饰等3D资产如,并适应特定的人体模型。

今天给大家介绍一种名为BAG&#xff08;Body-Aligned 3D Wearable Asset Generation&#xff09;的新方法&#xff0c;可以自动生成可穿戴的3D资产&#xff0c;如服装和配饰&#xff0c;以适应特定的人体模型。BAG方法通过构建一个多视图图像扩散模型&#xff0c;生成与人体对齐…

数据库 绪论

目录 数据库基本概念 一.基本概念 1.信息 2.数据 3.数据库&#xff08;DB&#xff09; 4.数据库管理系统&#xff08;DBMS&#xff09; 5.数据库系统&#xff08;DBS&#xff09; 二.数据管理技术的发展 1.人工管理阶段 2.文件系统阶段 3.数据库系统阶段 4.数据库管…

跨越边界,大模型如何助推科技与社会的完美结合?

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 概述 2024年&#xff0c;大模型技术已成为人工智能领域的焦点。这不仅仅是一项技术进步&#xff0c;更是一次可能深刻影响社会发展方方面面的变革。大模型的交叉能否推动技术与社会的真正融合&#xff1f;2025年…

kafka生产端之架构及工作原理

文章目录 整体架构元数据更新 整体架构 消息在真正发往Kafka之前&#xff0c;有可能需要经历拦截器&#xff08;Interceptor&#xff09;、序列化器&#xff08;Serializer&#xff09;和分区器&#xff08;Partitioner&#xff09;等一系列的作用&#xff0c;那么在此之后又会…

在 Windows 上使用 ZIP 包安装 MySQL 的详细步骤

以下是使用官方 ZIP 包在 Windows 上安装 MySQL 的详细步骤&#xff0c;确保能通过 mysql -uroot -p 成功连接。 步骤 1&#xff1a;下载 MySQL ZIP 包 访问 MySQL 官方下载页面&#xff1a; https://dev.mysql.com/downloads/mysql/选择 Windows (x86, 64-bit), ZIP Archive&…

记录 | WPF创建和基本的页面布局

目录 前言一、创建新项目注意注意点1注意点2 解决方案名称和项目名称 二、布局2.1 Grid2.1.1 RowDefinitions 行分割2.1.2 Row & Column 行列定位区分 2.1.3 ColumnDefinitions 列分割 2.2 StackPanel2.2.1 Orientation 修改方向 三、模板水平布局【Grid中套StackPanel】中…

SpringCloud - Nacos注册/配置中心

前言 该博客为Nacos学习笔记&#xff0c;主要目的是为了帮助后期快速复习使用 学习视频&#xff1a;7小快速通关SpringCloud 辅助文档&#xff1a;SpringCloud快速通关 源码地址&#xff1a;cloud-demo 一、简介 Nacos官网&#xff1a;https://nacos.io/docs/next/quickstar…

C++ 继承(1)

1.继承概念 我们平时有时候在写多个有内容重复的类的时候会很麻烦 比如我要写Student Teacher Staff 这三个类 里面都要包含 sex name age成员变量 唯一不同的可能有一个成员变量 但是这三个成员变量我要写三遍 太麻烦了 有没有好的方式呢&#xff1f; 有的 就是继承…

【C语言】传值调用与传址调用详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;传值调用1. 什么是传值调用&#xff1f;2. 示例代码&#xff1a;传值调用失败的情况执行结果&#xff1a; 3. 为什么传值调用无法修改外部变量&#xff1f; &#x1f4…

蓝桥杯C语言组:图论问题

蓝桥杯C语言组图论问题研究 摘要 图论是计算机科学中的一个重要分支&#xff0c;在蓝桥杯C语言组竞赛中&#xff0c;图论问题频繁出现&#xff0c;对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用&#…

windows通过网络向Ubuntu发送文件/目录

由于最近要使用树莓派进行一些代码练习&#xff0c;但是好多东西都在windows里或虚拟机上&#xff0c;就想将文件传输到树莓派上&#xff0c;但试了发现u盘不能简单传送&#xff0c;就在网络上找到了通过windows 的scp命令传送 前提是树莓派先开启ssh服务&#xff0c;且Window…

Unity抖音云启动测试:如何用cmd命令行启动exe

相关资料&#xff1a;弹幕云启动&#xff08;原“玩法云启动能力”&#xff09;_直播小玩法_抖音开放平台 1&#xff0c;操作方法 在做云启动的时候&#xff0c;接完发现需要命令行模拟云环境测试启动&#xff0c;所以研究了下。 首先进入cmd命令&#xff0c;CD进入对应包的文件…

ZU47DR 100G光纤 高性能板卡

简介 2347DR是一款最大可提供8路ADC接收和8路DAC发射通道的高性能板卡。板卡选用高性价比的Xilinx的Zynq UltraScale RFSoC系列中XCZU47DR-FFVE1156作为处理芯片&#xff08;管脚可以兼容XCZU48DR-FFVE1156&#xff0c;主要差别在有无FEC&#xff08;信道纠错编解码&#xff0…

【算法】动态规划专题⑥ —— 完全背包问题 python

目录 前置知识进入正题模板 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 完全背包问题是动态规划中的一种经典问题&#xff0c;它与0-1背包问题相似&#xff0c;但有一个关键的区别&#xff1a;在完全背包问题中&#xff0c;每种物品都有无限的数量可用。…

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…

51单片机之引脚图(详解)

8051单片机引脚分类与功能笔记 1. 电源引脚 VCC&#xff08;第40脚&#xff09;&#xff1a;接入5V电源&#xff0c;为单片机提供工作电压。GND&#xff08;第20脚&#xff09;&#xff1a;接地端&#xff0c;确保电路的电位参考点。 2.时钟引脚 XTAL1&#xff08;第19脚&a…

jupyterLab插件开发

jupyter lab安装、配置&#xff1a; jupyter lab安装、配置教程_容器里装jupyterlab-CSDN博客 『Linux笔记』服务器搭建神器JupyterLab_linux_布衣小张-腾讯云开发者社区 Jupyter Lab | 安装、配置、插件推荐、多用户使用教程-腾讯云开发者社区-腾讯云 jupyterLab插件开发教…

配置#include “nlohmann/json.hpp“,用于处理json文件

#include “nlohmann/json.hpp” // 需要安装 nlohmann/json.hpp 头文件 using json = nlohmann::json; 下载链接:https://github.com/nlohmann/json/tree/develop 1.下载并解压:首先,需要从nlohmann/json的GitHub仓库下载源代码,并解压得到的文件。 地址: nlohmann/json…

MATLAB | 基于Theil-Sen斜率和Mann-Kendall检验的栅格数据趋势分析

最近看到一些博主分享关于 SenMK 检验的代码&#xff0c;对于新手来说可能有点复杂。我们编写了一段 MATLAB 代码&#xff0c;能够一次性解决这些问题&#xff0c;简化操作流程。我们还准备了几个关于趋势检验的空间分布图&#xff0c;供大家参考。 一、Sens Slope和Mann-Kenda…