资讯专栏INFORMATION COLUMN

带你了解数据库中group by的用法

qc1iu / 2672人阅读

摘要:注意是先排序后分组语法语法说明,,表达式未封装在聚合函数中,必须包含在语句末尾的子句中。语句的存在弥补了关键字不能与聚合函数联合使用的不足。

前言

本章主要介绍数据库中group by的用法,也是我们在使用数据库时非常基础的一个知识点。并且也会涉及Join的使用,关于Join的用法,可以看我写的上一篇文章:带你了解数据库中JOIN的用法 如有错误还请大家及时指出~

以下都是采用mysql数据库
Group By 概念

Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。
作用:通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。

注意:group by 是先排序后分组!
语法
SELECT expression1, expression2, ... expression_n, 
       aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
[ORDER BY expression [ ASC | DESC ]];
语法说明

expression1,expression2,... expression_n
表达式未封装在聚合函数中,必须包含在SQL语句末尾的GROUP BY子句中。

aggregate_function
这是一个聚合函数,例如SUM,COUNT,MIN,MAX或AVG函数。

aggregate_expression
这是将使用aggregate_function的列或表达式。

tables
您希望从中检索记录的表。FROM子句中必须至少列出一个表。

where
可选的。这些是要选择的记录必须满足的条件。

ORDER BY表达式
可选的。用于对结果集中的记录进行排序的表达式。如果提供了多个表达式,则值应以逗号分隔。

ASC
可选的。ASC按表达式按升序对结果集进行排序。如果没有修饰符是提供者,则这是默认行为。

DESC
可选的。DESC按表达式按降序对结果集进行排序。

常用聚合函数

count() 计数

sum() 求和

avg() 平均数

max() 最大值

min() 最小值

举例

我们以下面两张表举例:

学生表(Student)

ID StudentName StudentClassID
1 小明 1
2 小红 2
3 小兰 3
4 小吕 2
5 小梓 1

班级表(Class)

ClassID ClassName
1 软件一班
2 软件二班
3 软件三班

计算每个班都有多少学生?

SELECT cl.ClassName,COUNT(stu.StudentClassID) AS studentNum
FROM student stu LEFT JOIN class cl ON stu.StudentClassID = cl.ClassID
GROUP BY cl.ClassName;

计算结果:

ClassName StudentName
软件一班 2
软件二班 2
软件三班 1
HAVING

HAVING语句通常与GROUP BY语句联合使用,用来过滤由GROUP BY语句返回的记录集。

HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。

通俗的说:WHERE过滤行,HAVING过滤组

语法
SELECT expression1, expression2, ... expression_n, 
       aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
语法说明

HAVING condition
这是另一个条件,仅应用于聚合结果以限制返回行的组。只有那些条件评估为TRUE的组才会包含在结果集中。

举例

采用上面两张数据表

查询学生人数大于2人的班级?

SELECT cl.ClassName,COUNT(stu.StudentClassID) AS studentNum
FROM student stu LEFT JOIN class cl ON stu.StudentClassID = cl.ClassID
GROUP BY cl.ClassName
HAVING COUNT(stu.StudentClassID)>=2;

计算结果:

ClassName StudentName
软件一班 2
软件二班 2
小结

当group by 与聚合函数配合使用时,功能为分组后计算

当group by 与 having配合使用时,功能为分组后过滤,获得满足条件的分组的返回结果。

having与where区别:where过滤行,having过滤组


文末
本章节主要简单介绍了数据库中group by的用法,并没有详细的展开讲解,相信大家只要把基础打扎实,再复杂的查询也可以通过分而治之的思想来解决。
欢迎关注公众号:Coder编程
获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!

推荐阅读

带你了解数据库中JOIN的用法

一篇让你理解进程与线程的区别与联系

一篇带你读懂TCP之“滑动窗口”协议

参考文章:

https://www.techonthenet.com/...

https://www.techonthenet.com/...

https://www.cnblogs.com/8335I...

Github个人主页目录

Gitee个人主页目录

欢迎大家关注并Star~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/48959.html

相关文章

  • 带你了解据库事务ACID特性

    摘要:前言前面我们介绍过数据库中带你了解数据库中的用法与带你了解数据库中的用法的相关用法。文末本章节主要简单介绍了数据库中事务的特性,下一章我们将详细介绍事务隔离。 前言 前面我们介绍过数据库中 带你了解数据库中JOIN的用法 与 带你了解数据库中group by的用法 的相关用法。本章节主要来介绍下数据库中一个非常重要的知识点事务,也是我们项目中或面试中经常会遇到的知识点。如有错误还请...

    hizengzeng 评论0 收藏0
  • 5分钟带你读懂事务隔离性与隔离级别

    摘要:串行化是最严格的隔离级别。接下来我们再提高一个事务隔离级别。事务隔离级别设置为查询事务隔离级别更改数据库隔离级别,设置隔离级别为串行化时间轴事务事务等待中这里就不再对流程做过多赘述。 前言 我们在上一章节中介绍过数据库的带你了解数据库中事务的ACID特性 的相关用法。本章节主要来介绍下数据库中一个非常重要的知识点事务的隔离级别。如有错误还请大家及时指出~ 问题: 事务的隔离级别有哪...

    muzhuyu 评论0 收藏0
  • 深入浅出了解“装箱与拆箱”

    摘要:本章部分内容从源码中解读一些自动装箱与拆箱的原理,以及会出现的一些陷阱已经性能等。例题分析我们通过几个经典的问题,来看看大家到底理解了装箱与拆箱的知识点没。 showImg(https://img-blog.csdnimg.cn/20190426221838971.gif);showImg(https://img-blog.csdnimg.cn/20190426221918208.pn...

    FullStackDeveloper 评论0 收藏0
  • 【SQL】一篇文章带你从零基础到初步掌握SQL

    摘要:章节安排本篇文章的目的主要是帮助初学者在初步知晓语句的情况下在短时间内系统入门,从而解决的查询问题。聚合函数子句和子句一致,只需注意是对聚合后的结果作限制。 前言 严格来说,SQL并不是一门编程语言,只是一个取数工具,与它的原意(结构化查询语言)比较贴切。和很多初学者一样,我学习SQL最大的门槛并非这门语言本身的难易,而是缺乏一个科学有效的学习路径。我尝试过看书(《Head First...

    luqiuwen 评论0 收藏0
  • 带你了解据库JOIN用法

    摘要:本次会介绍数据库中的的用法以及它们之间的区别。所以一共有种选择了,也就是笛卡尔积。文末本章节主要介绍了数据库中的用法,以及其他方面的小知识点。 前言 欢迎关注公众号:Coder编程获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识! 本章主要介绍数据库中Join的的用法,也是我们在使用数据库时非常基础的一个知识点。本次会介绍数据库中的inner join、left join、...

    Sleepy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<