【MySql】数据库的聚合查询

这篇具有很好参考价值的文章主要介绍了【MySql】数据库的聚合查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在最前面的话

        哈喽,宝子们,今天给大家带来的是MySql数据库的聚合查询。在前面CRUD章节我们学习了表达式查询,表达式查询是针对列和列之间进行运算的,那么如果想在行和行之间进行运算,那么就需要用到聚合查询。聚合查询除了包含聚合函数外(count,sum,avg,max,min),还包含group by 和 having 语句。接下来让我们一起进入学习吧,感谢大家的支持!喜欢的话可以三连哦~~~

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

目录

一、聚合函数

1、COUNT([DISTINCT]expr)

2、SUM([DISTINCT]expr)

3、AVG([DISTINCT]expr)

4、MAX([DISTINCT]expr)

5、MIN([DISTINCT]expr)

二、GROUP BY子句

三、HAVING子句


一、聚合函数

        常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有:

函数 说明
COUNT([DISTINCT]expr)

返回查询到的数据的 数量

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

插入测试表

        为了大家更好的学习聚合函数,我们在学习前先创建一张测试表并插入数据,下面的学习案例都通过这张表举例子:

--创建考试成绩表
CREATE TABLE exam_result (
id INT,
name VARCHAR(20),
chinese DECIMAL(3,1),
math DECIMAL(3,1),
english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
1、COUNT([DISTINCT]expr)

把数据表中的数据数量进行汇总,返回汇总的结果。

语法:

select count(表达式) from 表名;--表达式可为*或列名

学习案例

*:

select count(*) from exam_result;--使用*

执行上述SQL语句后,运行结果如下图所示: 

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

列名:

select count(name) from exam_result;--使用列名

 执行上述SQL语句后,运行结果如下图所示: 

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

拓展知识:大家会发现使用列名与使用*号达到的效果是一样的,但其实如果当前列为NULL,使用列名就不会计算进去,而使用*号就会。

当插入一条name为NULL的数据,再次运行结果如下图所示:

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

 distinct:

select count(distinct name) from exam_result;--使用distinct去重

执行上述SQL语句后,运行结果如下图所示: 

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

 2、SUM([DISTINCT]expr)

把这一列的若干行进行求和(算术运算),只能针对数字类型使用。

语法:

select sum(表达式) from 表名;--表达式为列名

 学习案例

---计算所有同学的语文成绩

select sum(chinese) from exam_result;--如果数据中有null会被排除掉

---计算所有科目的总成绩

select sum(chinese+math+english) from exam_result;--如果数据中有null会被排除掉
 3、AVG([DISTINCT]expr)

把这一列的若干行进行平均值运算(算术运算),只能针对数字类型使用。

语法:

select avg(表达式) from 表名;--表达式为列名

 学习案例

---计算数学成绩的平均值

select avg(math) from exam_result;

---计算所有科目总成绩的平均值

select avg(chinese+math+english) from exam_result;
 4、MAX([DISTINCT]expr)

把这一列的若干行进行求最大值(算术运算),只能针对数字类型使用。

 语法:

select max(表达式) from 表名;--表达式为列名

学习案例

---计算英语成绩的最大值

select max(exglish) from exam_result;

---计算所有科目总成绩的最大值

select max(chinese+math+english) from exam_result;
5、MIN([DISTINCT]expr)

把这一列的若干行进行求最小值(算术运算),只能针对数字类型使用。

语法:

select min(表达式) from 表名;--表达式为列名

 学习案例

---计算数学成绩的最小值

select min(math) from exam_result;

---计算所有科目总成绩的最小值

select min(chinese+math+english) from exam_result;

二、GROUP BY子句

插入测试表

为了大家更好的学习group by,我们在学习前先创建一张测试表并插入数据,下面的学习案例都通过这张表举例子:

---创建员工表
create table emp(
    id int primary key auto_increment,
    name varchar(20),
    role varchar(20),
    salary int);
---插入数据
insert into emp values(null,'张三','程序员',1688);
insert into emp values(null,'李四','程序员',1888);
insert into emp values(null,'王五','程序员',1988);
insert into emp values(null,'赵六','产品经理',168);
insert into emp values(null,'田七','产品经理',188);
insert into emp values(null,'周八','老板',8888);

 group by是针对指定的列进行分组,把这一列中值相同的行分到一组中再分别使用聚合函数。

语法:

select 列名,聚合函数 from 表名 group by 列名;

 学习案例

---计算不同职务的平均工资

select role,avg(salary) from emp group by role;--先分组,再算平均值

执行上述SQL语句后,运行结果如下图所示: 

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

拓展知识:如果只分组不使用聚合函数可能无法得到准确数据,会得到每组的第一条记录(如下图所示)。

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

三、HAVING子句

group by 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 where语句,而需要用having。

语法:

select 列名,聚合函数 from 表名 group by 列名;

 学习案例:

使用group by的时候还可以搭配其它条件,但是需要区分清楚该条件是在分组前的条件还是分组后的条件。

 ---查询每个岗位的平均工资,但是排除张三(分组之前)

select role,avg(salary) from emp where name!='张三' group by role;
---先进行where筛选,再根据role分组,最后使用avg算平均

执行上述SQL语句后,运行结果如下图所示: 

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

---查询每个岗位的平均工资,但排除平均工资超过2k的结果(分组之后)

select role,avg(salary) from emp group by role having avg(salary)<2000;

执行上述SQL语句后,运行结果如下图所示: 

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql

拓展知识:在group by中可以一条sql语句完成上述两者的条件筛选。

---查询每个岗位的平均工资,但是排除张三并保留平均值<2k的结果

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

执行上述SQL语句后,运行结果如下图所示: 

【MySql】数据库的聚合查询,MySql,数据库,Sql语言,数据库,mysql,sql


        希望各位读者阅读后都能有所收获,如果喜欢本篇博客的可以点赞+关注+收藏!!!同时也欢迎各位大神如果在阅读过程中发现文章有错误也可私信指正错误,我们下一篇博客再见~~~ 文章来源地址https://www.toymoban.com/news/detail-703912.html

到了这里,关于【MySql】数据库的聚合查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据库:数据库的约束以及数据的聚合、联合查询

    目录 一.关系模型的简要概述 二.数据库的约束  2.1约束类型         2.2NULL约束 2.3 UNIQUE:唯一约束 2.4 默认约束 2.5 PRIMARY KEY:主键约束 2.6 FOREIGN KEY:外键约束 2.7 CHECK约束 三.高效率查询 3.1高效率查询的分类 3.2聚合查询 3.2.1聚合函数 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.联合查询

    2024年02月10日
    浏览(67)
  • 【MySQL探索之旅】数据库设计以及聚合查询

    📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢迎各位大佬指点,相互学习进步! 数据库

    2024年04月09日
    浏览(53)
  • 【JaveWeb教程】(20) MySQL数据库开发之 基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询 详细代码示例讲解

    在上次学习的内容中,我们讲解了: 使用DDL语句来操作数据库以及表结构(数据库设计) 使用DML语句来完成数据库中数据的增、删、改操作(数据库操作) 我们今天还是继续学习数据库操作方面的内容:查询(DQL语句)。 查询操作我们分为两部分学习: DQL语句-单表操作

    2024年02月02日
    浏览(85)
  • 【MySQL】MySQL PHP 语法,PHP MySQL 简介,查询,下载 MySQL 数据库, SQL 教程

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP,在这些语言中,MySQL 在 PHP 的 web 开发中是应用最广泛。 我们

    2024年02月11日
    浏览(58)
  • 玩转MySQL数据库之SQL优化之慢查询

    本系列为:MySQL数据库详解,为千锋资深教学老师独家创作,致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~ 文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流! 从今天开始本系列

    2024年02月06日
    浏览(96)
  • MySQl数据库第八课-------SQL命令查询-------主要命脉

     欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————— 查询数据         条件         逻辑运算符         模糊查询         范围查询 in         判断空 UNION  排序 聚合 分组:gro

    2024年02月16日
    浏览(53)
  • 【MySQL】数据库的查询语言DQL

    目录 前言: 一.基本查询 1.1查询多个字段 1.2设置别名 1.3去除字段中重复的值 二.条件查询 2.1条件的种类 2.1.1比较运算符 2.1.2逻辑运算符 三.结尾   在前面讲完了如何增删改数据表中的记录后,那么如何使用这些数据就成了另一个重点。   当我们浏览网站的时候,商品的各种

    2024年02月08日
    浏览(44)
  • Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入

    要从MySQL中的表格中选择数据,请使用\\\"SELECT\\\"语句: 示例选择\\\"customers\\\"表格中的所有记录,并显示结果: 注意 :我们使用 fetchall() 方法,该方法从上次执行的语句中获取所有行。 要仅选择表格中的某些列,请使用\\\"SELECT\\\"语句,后跟列名: 示例仅选择name和address列: 如果您只对

    2024年02月05日
    浏览(95)
  • 数据库 SQL高级查询语句:聚合查询,多表查询,连接查询

    创建Students和Courses表 直接查询 设置别名查询 设置条件查询 使用COUNT(*) 和 COUNT(StudentID)是一样的效果,因为StudentID是主键,每行记录的主键都不同。另外我们在聚合查询中还是能使用WHERE子句的,比如我们要 查找年龄大于20岁的学生数量 ,可使用以下SQL语句: 函数 说明 SUM

    2024年02月09日
    浏览(127)
  • MySQL数据库基础(十):DQL数据查询语言

    文章目录 DQL数据查询语言 一、数据集准备 二、select查询 三、简单查询 四、条件查询 1、比较查询 2、范围查询 3、逻辑查询 4、模糊查询 5、非空查询 五、排序查询 六、聚合查询 七、分组查询与having子句 1、分组查询介绍 2、group by的使用 3、group by + 聚合函数的使用 4、gro

    2024年02月21日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包