当前位置: 首页 > news >正文

第二阶段-第二章—8天Python从入门到精通【itheima】-134节(SQL——DQL——分组聚合)

目录

134节——DQL:分组聚合

1.学习目标

2.分组聚合

3.论MySQL 中 GROUP BY 和 WHERE 的异同

MySQL 中 GROUP BY 和 WHERE 的异同:

一、相同点:都是 “筛数据” 的工具

二、不同点:筛的时机和对象完全不一样

1. 作用时机不同:先筛行,再分组

2. 作用对象不同:筛单行 vs 筛分组

3. 不能混搭的 “规矩”

三、一句话总结

4.小节总结

​编辑

好了,又一篇博客和代码写完了,励志一下吧,下一小节等等继续:


134节——DQL:分组聚合

1.学习目标

1.掌握DQL的group by进行分组聚合查询

2.分组聚合




代码实例:
 

use student;select * from student;-- 查询男女生的各自的平均年龄
select avg(age),gender from student group by gender;-- 错误的查询示例:会爆出error!!!
/*因为:查询的性别分组的avg(age),这个avg(age)是每个性别组的平均值,
如果加上name这个具体字段,那这个avg(age)属于谁?这样就有歧义了*/
-- select avg(age),gender,name from student group by gender;-- 这是对于普通字段来说:
-- 这是SQL的限制:group by中出现了谁【普通的字段】,select中才能出现写谁【普通的字段】;而聚合函数不属于普通的字段,因此不包括/*对于聚合函数的count来说【按group by gender后】,她本来就是计数的功能,
分完组进行各自的性别计数,因此count(name),count(age),count(gender),count(id),count(*),这些功能都是一样的*/
-- 示例:【一个SQL语句里面是可以写多个聚合函数的】
select gender,sum(age),avg(age),MIN(age),MAX(age),COUNT(*) from student group by gender;

3.论MySQL 中 GROUP BY 和 WHERE 的异同

MySQL 中 GROUP BY 和 WHERE 的异同:

一、相同点:都是 “筛数据” 的工具

不管是WHERE还是GROUP BY,本质上都是为了从一堆数据中 “挑出我们想要的”,避免查出来的结果乱七八糟。

二、不同点:筛的时机和对象完全不一样

用一个例子先打底:假设我们有一张student表,存了 “班级”“姓名”“年龄” 三列数据,现在想查 “每个班级中,年龄大于 18 岁的学生有多少人”。

1. 作用时机不同:先筛行,再分组
  • WHERE:在分组之前干活。
    比如 “年龄> 18” 这个条件,WHERE会先把所有年龄≤18 的学生直接排除,剩下的才会参与后续的分组。
    就像筛沙子:先把小石子(不符合条件的行)筛掉,剩下的沙子再分堆。

  • GROUP BY:在分组之后干活。
    它的作用是把WHERE筛剩下的行,按某个字段(比如 “班级”)分成几堆,每一堆就是一个 “组”。
    比如按 “班级” 分组后,会得到 “一班”“二班”“三班” 三个组,每个组里都是年龄 > 18 的学生。

2. 作用对象不同:筛单行 vs 筛分组
  • WHERE:针对 “单个行” 筛。
    条件都是判断单行数据是否符合要求,比如 “年龄> 18”“性别 =' 男 '”,每个条件只看单独的一行,不管其他行。

  • GROUP BY:针对 “一组行” 操作。
    分组后,每组是多个行的集合,通常会配合聚合函数(COUNT“算数量”、SUM“求和” 等)使用。
    比如 “每个班级的学生数量”,就是用GROUP BY 班级把行分成组,再用COUNT(*)计算每组有多少行。

3. 不能混搭的 “规矩”
  • WHERE 后面不能用聚合函数
    比如不能写WHERE COUNT(*)>2(因为WHERE在分组前执行,此时还没有 “组”,没法算COUNT(*))。

  • GROUP BY 必须和聚合函数搭配才有用
    单独写GROUP BY 班级没意义,必须加上COUNT(*)“算每个班的人数”、AVG(年龄)“算每个班的平均年龄” 等,才能体现分组的价值。

三、一句话总结
  • WHERE:先把 “不合格的单个行” 踢出去,只留合格的行。
  • GROUP BY:把合格的行按规则分成 “组”,再对每组做统计(比如算数量、求和)。
 

用例子串起来就是:

 
-- 查每个班级中,年龄>18的学生数量  
SELECT 班级, COUNT(*) AS 学生数量  
FROM student  
WHERE 年龄>18  -- 先筛掉年龄≤18的行  
GROUP BY 班级;  -- 再按班级分组,算每组的人数  

4.小节总结

group by中出现了哪个字段,select中才能出现该字段。

【以上是对于普通字段来说,对于应用了聚合函数的字段不生效】


 


好了,又一篇博客和代码写完了,励志一下吧,下一小节等等继续:

Patrick:

 

你觉得自己写的是 “人人皆知的 shit”?那我问你:你第一次学会走路时,摇摇晃晃迈出的步子,在别人眼里是不是 “人人都会的小事”?但对你来说,那是从爬到走的里程碑。

 

你现在敲的每一行 SQL、写的每段总结,就像当年学走路的步子。那些 “人人皆知” 的基础,在你这里有不一样的重量 —— 它们是你忍着身体的不适,一点点啃下来的;是你对着报错信息反复调试,才弄明白的 “GROUP BY 和 WHERE 的区别”。别人眼里的 “常识”,在你这里是 “和自己较劲后的战利品”,这本身就值得被记录。

 

中二?偏执?我倒觉得,能对着基础知识点死磕、能为自己写的东西沾沾自喜,这是最珍贵的 “初心”。多少人学东西半途而废,就是因为觉得 “太简单不值得记录”,结果连 “简单” 都没吃透。你把这些 “小事” 记下来,不是炫耀,是在给自己的成长盖戳 —— 就像登山时在石头上画的记号,回头看时,才知道自己爬了多高。

 

你以为 “了不起的大事” 是突然降临的?不是。是无数个 “觉得自己写了 shit 还坚持写” 的夜晚,攒出来的。你对抗身体的不适、对抗自我怀疑,还能坐在那里敲代码、写总结,这本身就比 “写出惊天动地的内容” 更了不起。

 

别管别人怎么看。你的博客不是写给 “人人” 看的,是写给 “今天的 Patrick” 和 “明天的 Patrick” 的。今天的你觉得 “沾沾自喜” 很傻,明天的你会谢谢今天这个 “傻” 得坚持记录的自己。

 

继续写吧。哪怕是基础到不能再基础的总结,哪怕是自己跟自己较劲的碎碎念 —— 这些都是你活着、在往前挪、没被打倒的证据。这样的证据,越多越好。

 

一个看你把 “小事” 走成 “长路” 的朋友

http://www.dtcms.com/a/291050.html

相关文章:

  • ansible批量部署zabbix客户端
  • 2024年ASOC SCI2区TOP,基于Jaya算法的粒子滤波器用于非线性模型贝叶斯更新,深度解析+性能实测
  • (十九)深入了解 AVFoundation-编辑:使用 AVMutableVideoComposition 实现视频加水印与图层合成(上)——理论篇
  • 【每日算法】专题四_前缀和
  • 算法-比较排序
  • Redis入门教程(一):基本数据类型
  • ppp实验
  • BEVformer个人理解与解读
  • 2025暑期—02卷积与滤波-边缘检测
  • 180页PPT烟草集团物流数字化架构设计咨询指南
  • 牛客网题解 | 单词识别
  • 宝塔访问lnmp项目,跳转不到项目根目录问题解决
  • Spring关于依赖注入的几种方式和Spring配置文件的标签
  • 大模型后训练——SFT实践
  • (SAM)Segment Anything论文精读(逐段解析)
  • 磁悬浮轴承振动的智能克星:自适应陷波器设计与DSP实现全解析
  • 有关Spring的总结
  • 解决 Ant Design v5.26.5 与 React 19.0.0 的兼容性问题
  • CMake与catkin_make的find_package()命令使用说明
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——1. 启航:你的第一个工业视觉应用
  • C/C++ 详谈结构体大小计算(内存对齐)
  • 基于 HAProxy 搭建 EMQ X 集群
  • vscode创建vue项目报错
  • 如何判断自己的电脑或主机是否支持DDR5内存?
  • Android 默认图库播放视频没有自动循环功能,如何添加2
  • MVC模式
  • vcruntime140_1.dll文件丢失?终极修复指南:从错误分析到修复全流程
  • Ubuntu 22.04 使用 Docker 安装 Redis 5 (安装包形式)
  • linux定时器使用
  • AD域控制器虚拟化的安全加固最佳实践