0

0

mysql怎么分组求和

WBOY

WBOY

发布时间:2022-03-09 16:15:52

|

21050人浏览过

|

来源于php中文网

原创

在mysql中,可以利用SELECT语句配合SUM()函数和“GROUP BY”来分组求和,语法为“SELECT 查询字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段一,分组字段二;”。

mysql怎么分组求和

本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。

mysql怎么分组求和

在mysql中,可以利用

SELECT 查询字段 SUM(求和字段) AS 字段 FROM 表名 WHERE 条件 GROUP BY 分组字段一,分组字段二;

来进行分组求和。

示例如下:

1)count() 求某列的行数

很容易理解,count(列名)就是求某列的行数,值得注意的一点是该列不会计算空值的行数。举例:

>-- 查询共有几名教师

f604b5b776bae6cd32fe24ddf8f19053.png

>-- 查询教师表共有多少行 SELECT COUNT(*) FROM teacher;

04890a450baad934334a2d4b9bf9f030.png

如果列中有重复值,我们计数不想计算重复值,怎么办呢?我们可以使用distinct来解决:

-- 查询成绩表里共有几个学生的成绩
SELECT COUNT(DISTINCT 学号) FROM score;

a69ffa520e70012d504badc6f4962b9e.png

2)sum() 对某列数据求和

求和,就是对某一列的数值进行求和,只能对数值进行计算。举例:

--  对所有成绩求和
SELECT SUM(成绩) FROM score;

191fff633233e4d11ec5122f85929d48.png

3)avg() 对某列数值求平均值

同样,平均值的计算只能对数值进行计算:

-- 对所有成绩求平均值
SELECT AVG(成绩) FROM score;

b9c0cf8b39661e385f5803d906da3844.png

4)max() 求某列数据的最大值、min() 求某列数据的最小值

-- 获取所有成绩中的最大成绩
SELECT MAX(成绩),MIN(成绩) FROM score;

12e2e7621cd310fdcc70a307a1215d2d.png

分组

问题中,我们提到,需要知道每科成绩的平均成绩,那么我们就需要进行分组。

SQL中,group by语句可以根据一列或者多列对结果集进行分组。举例:

fccfec196f4e870f4414ff9626579938.png

-- 计算每一科课程的平均成绩
SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号;

7b4f39d03812f4491cc38b34ee8d2e18.png

在上篇文章中,我们就有简单的介绍SQL语句执行顺序:先执行from从哪个表获取数据,再执行select语句;


这里我们从成绩表获取数据,使用group by语句将数据按某种规则进行分组;然后在分组的结果上进行计算count();最后select组合结果,把上一步的每一组计算结果总结到一个表中

对分组条件指定条件

在一开始的问题里,要求“计算各科的平均成绩并且得出平均成绩大于等于80分”,以上两节我们得到了计算每天一科的平均成绩,现在对平均成绩指定条件:“大于等于80分”,我们使用having子句

Difeye-敏捷的轻量级PHP框架
Difeye-敏捷的轻量级PHP框架

Difeye是一款超轻量级PHP框架,主要特点有: Difeye是一款超轻量级PHP框架,主要特点有: ◆数据库连接做自动主从读写分离配置,适合单机和分布式站点部署; ◆支持Smarty模板机制,可灵活配置第三方缓存组件; ◆完全分离页面和动作,仿C#页面加载自动执行Page_Load入口函数; ◆支持mysql,mongodb等第三方数据库模块,支持读写分离,分布式部署; ◆增加后台管理开发示例

下载

7c3dea9e8f79e7d8d79ce22524ea111d.png

having子句与where子句都是有条件的选取数据,不同的是where不能与汇总函数一起使用。

-- 计算平均成绩大于等于80分的课程;
SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号 HAVING AVG(成绩)>=80;

那是不是说,having子句的顺序也是在select结果汇总的前边呢?是的,having子句是对group by 的分组结果指定条件,比如要求大于等于80分,筛选出结果后,在进行结果汇总。

582a07bf7e6eac4b79e4a8875101daee.png

-- 对教师表根据教师姓名排序
SELECT * FROM teacher ORDER BY 教师姓名;

e5449633e01ee6c8ae8546e7f6f4532d.png

我们发现,空值Null排在了最前面,所以:含有空值的列在排序时候,空值null会在开头,当数据量很大想看空值的情况,就可以用这个排序。

另外,在补充一个limit语句从查询结果中取出指定行,比如,我们如果从刚才的查询结果中只取第一行:

-- 计算平均成绩大于等于80分的课程并根据成绩降序排,并获取第一行
SELECT 课程号,AVG(成绩) FROM score GROUP BY 课程号 HAVING AVG(成绩)>=80 ORDER BY AVG(成绩) DESC LIMIT 1;

d9471ec9c5b68e340c355e202312d843.png

接下来我们进行一个总结。

用SQL解决业务问题分析思路

简单来说:明确问题,将问题翻译成大白话,逐步进行拆解,并写出分析思路和对应的SQL思路。

1) 明确问题,将问题翻译成大白话:

“计算各科的平均成绩并且得出平均成绩大于等于80分的课程并降序排列”翻译成大白话就是:

“计算每一门课程平均成绩,然后根据得出的结果,进行大于等于80分的条件查询,对查询结果进行降序排列”。

2) 逐步进行拆解,并写出分析思路和对应的SQL思路:

① 对课程号进行分组,计算每一门课程的平均成绩;

② 对①的结果指定条件“>=80”;

③ 对②的结果进行降序排列;

我们可以把拆解后的思路套用到下方的公式中:

select 查询结果
from 从那张表中查找数据
where 查询条件(运算符、模糊查询)
group by 分组(每个)
having 对分组结果指定条件
order by 对查询结果排序
limit 从查询结果中取出指定行;

试一下吧:

select 查询结果[课程号,avg(成绩)]
from 从那张表中查找数据[成绩表score]
where 查询条件(运算符、模糊查询)[No]
group by 分组(每个)[课程号]
having 对分组结果指定条件[avg(成绩)>=80]
order by 对查询结果排序[avg(成绩)desc]
limit 从查询结果中取出指定行;[No]

这样子,问题是不是就迎刃而解呢?

推荐学习:mysql视频教程

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

676

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1094

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

675

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

571

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

412

2024.04.29

php学习网站大全
php学习网站大全

精选多个优质PHP入门学习网站,涵盖教程、实战与文档,适合零基础到进阶开发者,助你高效掌握PHP编程。

0

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 785人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号