一文讲懂SQL分组子句GROUP BY

大家好,我是宁一。

今天讲解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子句。

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

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵宁一

点赞是最好的赞赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值