当前位置:首页 > 技术分析 > 正文内容

一文讲懂SQL分组子句GROUP BY

ruisui8816小时前技术分析1

大家好,我是宁一。


今天讲解SQL教程第15课:GROUP BY子句。


GROUP BY子句是用来给结果集分组的,通常与我们上节课讲的聚合函数结合使用。


基本语法:


SELECT  <字段名> 
FROM  <表名>  
GROUP BY <字段名>;


1、GROUP BY子句


如果SQL语句中有GROUP BY子句,SELECT后面的字段如果是表中现有的列,则GROUP BY子句中也必须有这个列,否则会报错。


这句话有点不好理解,我们举个实例就清楚多了。


实例:在Students表中,将记录通过学生性别Ssex分组。



SELECT Ssex
FROM Students
GROUP BY Ssex;



SELECT后面跟的列是表中现有的列Ssex,GROUP BY子句中也有Ssex列。


如果像下面这样写,SELECT后面跟的Sname列,没有出现在GROUP BY子句中,就会报错。


SELECT Ssex,Sname
FROM Students
GROUP BY Ssex;


上面语句改成下面这样,就没错了。所以一定要牢记,SELECT后面的字段如果是表中现有的列,则GROUP BY子句中也必须有这个列。


SELECT Ssex,Sname
FROM Students
GROUP BY Ssex,Sname;


2、配合聚合函数使用


实际业务中,一般GROUP BY子句都会与聚合函数搭配使用。


实例:在Students表中,将记录通过学生性别Ssex分组,计算每个分组有多少人,并找出每个分组中最大的生日Sage。


实例解析:COUNT(*)与GROUP BY结合使用,会计算出每个分组中的记录数量。


SELECT
  Ssex,
  COUNT(*) AS "数量",
  MAX(Sage) AS "最大生日"
FROM Students
GROUP BY Ssex;



3、语句书写顺序


如果语句中同时有WHERE、JOIN、GROUP BY、ORDER BY、LIMIT。书写顺序是这样的:


SELECT <字段名> 
FROM <表名>
JOIN <表名>
WHERE <筛选条件>
GROUP BY <字段名>
ORDER BY <字段名>
LIMIT <限制行数>;


语句顺序一定要记牢,顺序不对会报错的。还有语句书写顺序与执行顺序不是一样的,后面的课程我们会详细讲到。


作业:结合Students表和Teachers表,查找每个班主任带的男女学生数量,最后根据数量倒序排序。



示例结果:



作业解析:根据示例答案,第一列是班主任姓名,Students表中只有教师编号Tid,所以我们需要JOIN连接Teachers表,获取到班主任姓名。


我们要查找每个班主任带的男女学生数量,通过GROUP BY对班主任Tname,学生性别Ssex分组,再通过COUNT(*)计算数量就可以了。


SELECT
  t.Tname AS "老师姓名",
  s.Ssex AS "学生性别",
  COUNT(*) AS "数量"
FROM Teachers AS t
JOIN Students AS s
ON t.Tid = s.Tid
GROUP BY t.Tname,s.Ssex
ORDER BY COUNT(*) DESC;


下节课,我们来讲讲HAVING子句。


点击关注,更新课程第一时间通知哦~

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4501.html

标签: group by desc
分享给朋友:

“一文讲懂SQL分组子句GROUP BY” 的相关文章

宽带客户收费管理系统--维修版

宽带客户收费管理系统--维修版headerfooter《宽带客户收费管理系统——维修版》是一款适合宽带运营商使用的管理系统。软件主要包括以下功能:1.主要功能包括用户开户、收费录入、工单登记、故障处理;2.自定义套餐及收费功能;3.强大的查询功能和数据备份功能以及严密的用户权限功能;4.界面设计简洁...

深入理解Vue.js组件通信:父子组件与子父组件数据交互详解

什么是Vue组件通讯 Vue.js 组件通信是指在 Vue 应用的不同组件之间进行数据交换和状态同步的过程。由于 Vue 的组件是基于单文件组件(SFCs)的模块化设计,每个组件都有自己的作用域,因此它们不能直接访问彼此的数据。为了使组件之间能够协同工作,Vue 提供了几种不同的通信方式。以下是 V...

「干货」FPGA设计中深度约束技巧及调试经验总结

今天跟大家分享的内容很重要,也是我们调试FPGA经验的总结。随着FPGA对时序和性能的要求越来越高,高频率、大位宽的设计越来越多。在调试这些FPGA样机时,需要从写代码时就要小心谨慎,否则写出来的代码可能无法满足时序要求。另外,最近跟网友聊天时,有谈到公众号寿命的问题,我觉得网络交换FPGA公众号应...

Excel中的FILTER函数详细介绍及使用示例

在Excel中处理大量数据时,经常需要根据特定条件筛选出符合条件的数据行或列。这正是Excel的FILTER函数发挥作用的地方。FILTER函数是Excel中一个非常强大的工具,它可以基于一个或多个条件动态地过滤数据,使数据分析和报告制作变得更加高效和准确。本文将详细介绍FILTER函数的用法,并提...

慕课 SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序

本课程以业务驱动技术栈,打造业务相对完整的掌上医疗小程序,解决大家没有好的毕设项目或者求职项目的困境。本课程案例采用前后端分离架构,业务功能完善(既有WEB管理端,也有移动用户端),界面美观,无需艰涩的技术也能做出亮眼的作品。SpringBoot2.X+Vue+UniAPP,全栈开发医疗小程序 |...

一文看懂企业微信开发简易教程

为让开发者快速理解开发流程,本篇章展示如何一步步设计一个能与企业后台互动的自建应用。添加自建应用登录企业微信管理端 -> 应用与小程序 -> 应用 -> 自建,点击“创建应用”,设置应用logo、应用名称等信息,创建应用。创建完成后,在管理端的应用列表里进入该应用,可以看到agen...