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

news/2025/2/12 20:36:41/

      


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 , 再根据上述的结果, 执行 countselect 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 参与运算,导致总成绩也为 nullselect 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.ppmy.cn/news/1571519.html

相关文章

PHP的JIT编译器

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 PHP是一种广泛使用的脚本语言&#xff0c;被用于构建…

ZooKeeper 和 Dubbo 的关系:技术体系与实际应用

引言 在现代微服务架构中&#xff0c;服务治理和协调是至关重要的环节。ZooKeeper 和 Dubbo 是两个在分布式系统中常用的技术工具&#xff0c;它们之间有着紧密的联系。本文将详细探讨 ZooKeeper 和 Dubbo 的关系&#xff0c;从基础概念、技术架构、具体实现到实际应用场景&am…

ZooKeeper 技术全解:概念、功能、文件系统与主从同步

引言 随着分布式系统变得越来越复杂&#xff0c;对协调服务的需求也在不断增长。ZooKeeper 作为一个由 Apache 维护的开源分布式协调服务框架&#xff0c;广泛用于 Hadoop 生态系统和其他需要协调的分布式环境中。这一系统旨在解决分布式应用中常见的挑战&#xff0c;如配置管…

Kafka 详细介绍

Kafka 详细介绍 1. 概述 Apache Kafka 是一个分布式流处理平台&#xff0c;由 LinkedIn 开发并开源&#xff0c;主要用于构建实时数据管道和流应用。它具备高吞吐量、低延迟、高可扩展性和持久性&#xff0c;广泛应用于日志收集、消息系统、流处理等场景。 2. 核心概念 Pro…

开源的 DeepSeek-R1「GitHub 热点速览」

春节假期回来&#xff0c;一睁眼全是王炸级的开源模型 DeepSeek-R1&#xff01; GitHub 地址→github.com/deepseek-ai/DeepSeek-R1 DeepSeek-R1 开源还不到一个月&#xff0c;Star 数就飙升至冲破天际的 70k。虽然目前仅开源了模型权重&#xff0c;但同时发布的技术论文详细地…

Word 编辑密码解密教程

如果你遇到 word 不能打开编辑或忘记密码的情况&#xff0c;别担心&#xff0c;这里有最简单的办法。具体步骤如下&#xff1a;在手机或电脑浏览器上输入 文件密码.top 进入密码找回网站&#xff0c;然后点击“立即开始”&#xff0c;上传文件&#xff0c;无需下载软件&#xf…

计算机视觉-拟合

一、拟合 拟合的作用主要是给物体有一个更好的描述 根据任务选择对应的方法&#xff08;最小二乘&#xff0c;全最小二乘&#xff0c;鲁棒最小二乘&#xff0c;RANSAC&#xff09; 边缘提取只能告诉边&#xff0c;但是给不出来数学描述&#xff08;应该告诉这个点线是谁的&a…

计算机毕业设计——Springboot餐厅点餐系统

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…