前言
本章主要介绍数据库中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的用法,并没有详细的展开讲解,相信大家只要把基础打扎实,再复杂的查询也可以通过分而治之的思想来解决。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。