告别手动统计!聚合函数实战指南|转行学DB第7天

本文涉及的产品
RDS AI 助手,专业版
云数据库 PolarDB MySQL 版,列存表分析加速 8核16GB
PolarDB Agent Flow,2核4GB
简介: 数据库小学妹带你轻松掌握SQL统计!告别手动数数据,用COUNT、AVG等聚合函数+GROUP BY分组+HAVING筛选,三步搞定人数、均分、最高分等汇总需求。附实战案例与避坑指南,让数据分析像设计软件统计面板一样直观简单~

告别一行行数数据,一招搞定统计汇总

大家好呀!我是数据库小学妹👋一个正在从设计转行学数据库的"萌新"。

前几篇我们学了怎么查数据、怎么排序、怎么筛选、怎么连表。但有个问题一直困扰我:

如果我想知道“班里有多少人?”
“数学平均分是多少?”
“每个部门各有几个员工?”
……
难道要一行行去数吗?

当然不是!今天我就把自己学到的数据汇总神器分享出来,让你用几句SQL就能搞定统计。


一、从一个真实场景说起

假设你有一张学生成绩表 score,记录了每个学生的姓名、班级、科目和分数。

name class subject score
小明 1班 数学 90
小红 1班 数学 85
小刚 2班 数学 92
小明 1班 语文 88
小红 1班 语文 90
小刚 2班 语文 86

问:“1班数学考试有多少人参加?平均分多少?最高分是多少?”

如果用Excel,你可能需要筛选、拖公式。但在数据库里,聚合函数一键就可以搞定。


二、五大聚合函数:统计界的“五虎将”

聚合函数就是对一组数据做计算,返回一个单一结果。就像用计算器求和、求平均一样。
💡如果从设计师的视角来说,聚合函数就像设计软件里面的 统计面板——一键显示图层数量、颜色数量、文件大小。
image_2.png

🛠️实战演练

-- 1班数学考试有多少人?
SELECT COUNT(*) FROM score 
WHERE class = '1班' AND subject = '数学';
-- 结果:2(小明和小红)

-- 1班数学平均分是多少?
SELECT AVG(score) FROM score 
WHERE class = '1班' AND subject = '数学';
-- 结果:(90+85)/2 = 87.5

-- 1班数学最高分?
SELECT MAX(score) FROM score 
WHERE class = '1班' AND subject = '数学';
-- 结果:90

💡 小细节:COUNT(*) 统计所有行,COUNT(列名) 只统计该列非空的行。如果某列是NULL,COUNT(列名) 会忽略它。


三、GROUP BY:一键分组统计

上面的例子只能看一个班级。如果我想看每个班级的数学平均分,难道要一个一个写条件吗?

不用!GROUP BY 就是用来分组的。

SELECT class, AVG(score) 
FROM score 
WHERE subject = '数学'
GROUP BY class;

结果:

class AVG(score)
1班 87.5
2班 92

GROUP BY 就像设计软件里的智能分组,自动把相同班级的数据分成一组,然后对每组分别计算平均值。

注意: SELECT 后面只能放两种东西:

  • 被分组的列(如 class
  • 聚合函数(如 AVG(score)

如果写成 SELECT name, AVG(score) ... GROUP BY class,就会报错,因为 name 不在分组里,数据库不知道选哪个 name


四、HAVING:分组后的筛选

WHERE 是在分组筛选数据,HAVING 是在分组筛选分组结果。

比如:找出平均分大于90的班级

SELECT class, AVG(score) as avg_score
FROM score
WHERE subject = '数学'
GROUP BY class
HAVING avg_score > 90;
class avg_score
2班 92

WHERE vs HAVING 一句话记清楚:

  • WHERE 过滤(分组前)
  • HAVING 过滤(分组后)

五、结合JOIN:多表分组统计

我们之前学过JOIN,现在可以把两张表连起来再做统计。比如:查每个班级的平均分(班级名称在班级表,成绩在成绩表)。

SELECT c.class_name, AVG(sc.score) as avg_score
FROM students s
INNER JOIN scores sc ON s.id = sc.student_id
INNER JOIN classes c ON s.class_id = c.id
GROUP BY c.class_name;

先JOIN拼成大表,再GROUP BY分组,完美!


六、新手避坑指南(血泪总结)

image_1.png

我踩过的坑:想统计每个班级的平均分,结果忘了写 GROUP BY,返回了整个表的平均分,还纳闷了半天为什么结果只有一行……


七、今日学习心得

📝核心总结(三句话):

  • 聚合函数:对一组数据做统计(COUNT、SUM、AVG、MAX、MIN)
  • GROUP BY:按某个字段分组,每组分别统计
  • HAVING:对分组后的结果再筛选

把它们组合起来,就能回答各种“按xx统计”的问题。比如:

  • 每个月的销售额是多少?→ GROUP BY month
  • 哪些产品的销量超过1000?→ HAVING SUM(quantity) > 1000

这些技能在写报表、做数据分析时几乎天天用。


👋 我是数据库小学妹,一个从设计转行数据库的菜鸟。我们一起,把复杂的技术变得简单有趣!💪


本文为个人学习总结,所有命令均在MySQL 8.0环境下验证。建议先用小数据量测试,理解清楚再应用到实际场景。

相关文章
|
2月前
|
SQL NoSQL 关系型数据库
数据库分类一次讲清|转行学DB第2天
数据库小学妹(UI转行萌新)用通俗语言拆解数据库分类:从关系型(MySQL/Oracle)、NoSQL(Redis/MongoDB/Cassandra)、NewSQL(TiDB)到2026年爆火的向量数据库(Pinecone/Milvus),按数据模型、部署架构、业务负载三大维度梳理,配场景化案例与选学路径,助新手轻松入门。
|
2月前
|
SQL 数据库
多表关联查询入门:LEFT JOIN、INNER JOIN一文搞懂|转行学DB第6天
本文通俗易懂地讲解了数据库多表查询的三种JOIN操作:INNER JOIN(内连接)只返回两表匹配的数据,适用于查询交集数据;LEFT JOIN(左连接)保留左表所有记录并匹配右表数据,适用于查询主表完整信息;RIGHT JOIN(右连接)则保留右表所有记录。
|
2月前
|
SQL 关系型数据库 MySQL
主键、外键和约束:让数据库“有规矩”才能不出错!|转行学DB第5天
本文用通俗易懂的语言讲解了主键(数据的唯一标识)、外键(表间关联)以及唯一约束、非空约束等其他常见约束规则。通过具体SQL示例展示了各种约束的使用方法,并分享了新手容易踩的坑和实用建议。
|
2月前
|
存储 JSON 缓存
告别数据混乱!数据库设计三范式从入门到实践
数据库小学妹带你轻松入门三范式!用“建房打地基”比喻,讲清1NF(列不可分)、2NF(消除部分依赖)、3NF(消除传递依赖),直击数据冗余、更新异常等痛点。附实战拆表案例与反范式化提醒,助你设计出结构清晰、稳定高效的数据库!
|
2月前
|
SQL 关系型数据库 MySQL
WHERE、ORDER BY、LIMIT三大神器,让你的查询精准又高效!
本文介绍了SQL查询中的三大核心语句:WHERE(条件过滤)、ORDER BY(排序)和LIMIT(限制结果数)。通过电商订单查询、用户活跃度分析等实际案例,展示了如何组合使用这些语句实现精准查询。文章还分享了常见避坑技巧(如字符串引号使用、NULL值判断)和性能优化建议(如索引使用、分页查询优化)。
|
2月前
|
SQL 关系型数据库 MySQL
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
用生活化比喻(如字典目录)详解索引原理:它通过B+树结构加速查询,避免全表扫描;涵盖创建、查看、删除索引方法,联合索引的最左前缀原则,以及读写平衡等实战要点——让查询从“等几秒”变“秒出”!
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
|
2月前
|
SQL 人工智能 安全
AI圈开始“养马”了?聊聊龙虾退位、爱马仕登基
AI智能体“龙虾”(OpenClaw)的衰落与“爱马仕”(Hermes Agent)的崛起:前者因API限策与高危漏洞(CVSS 9.9)式微;后者以持久记忆、技能自生成、跨平台互通等实用能力破圈,成技术圈新“拐杖”。但技术无银弹,懂你的工具才是真助力。
|
2月前
|
SQL 关系型数据库 MySQL
子查询:让SQL像俄罗斯套娃一样嵌套!|转行学DB第8天
数据库小学妹带你轻松入门子查询!用“SELECT里套SELECT”,像俄罗斯套娃一样,一步解决“先算平均分、再查高分学生”等两步难题。支持WHERE(条件筛选)、FROM(临时表)、SELECT(标量列)三种用法,简洁直观,新手友好~
|
21天前
|
canal 缓存 NoSQL
数据库扛不住高并发?Redis缓存+双写一致性:给你的系统装上“涡轮增压”
数据库小学妹带你破解Redis缓存一致性难题!面对高并发,如何确保Redis与数据库数据同步?详解“先更库后删缓”“延时双删”“Binlog异步同步”等4大方案,直击雪崩、击穿、穿透三座大山,助你构建又快又稳的数据库架构.
|
2月前
|
SQL 数据库 数据库管理
从运营到DBA,我用了这3个“偷懒”方法学SQL
用运营人思维教小白轻松学SQL:①把SQL当Excel对话,理解SELECT/FROM/WHERE;②建“报错翻译本”,快速定位解决错误;③用“填空题法”抄改练,复用模板上手。不求完美,先跑通、看懂、不崩溃!
从运营到DBA,我用了这3个“偷懒”方法学SQL

热门文章

最新文章