08丨什么是SQL的聚集函数,如何利用它们汇总表的数据?
该思维导图由 AI 生成,仅供参考
聚集函数都有哪些
- 深入了解
- 翻译
- 解释
- 总结
SQL聚集函数是对数据进行汇总的重要工具,能够帮助我们求取最大值、最小值和平均值等统计信息。本文详细介绍了SQL中的聚集函数种类及使用方法。首先介绍了包括COUNT、AVG、MAX、MIN和SUM在内的聚集函数,以及它们的使用方法和示例。其次,讲解了如何对数据进行分组,并进行聚集统计,使用GROUP BY子句对数据进行分组,并通过示例展示了对数据进行分组统计的方法。最后,介绍了HAVING子句的使用方法和与WHERE子句的区别,通过示例演示了如何使用HAVING对分组进行过滤。读者通过本文可以快速了解SQL聚集函数的概念和使用方法,以及在SELECT查询中关键字的顺序。文章还提供了两个基于heros数据表的SQL查询语句示例,帮助读者加深理解。总之,本文为读者提供了全面的SQL聚集函数知识,帮助其在实际应用中更加灵活运用。
《SQL 必知必会》,新⼈⾸单¥68
全部留言(130)
- 最新
- 精选
- grey927ORDER BY 是对分的组排序还是对分组中的记录排序呢?
作者回复: 这是个好问题,ORDER BY就是对记录进行排序。如果你在前面用到了GROUP BY,实际上是一种分组的聚合方式,已经把一组的数据聚合成为了一条记录,所以再进行排序的时候,也相当于是对分的组进行排序。
2019-07-04275 - 不负一个发现:虽然 SELECT 的执行顺序在 GROUP BY 和 HAVING 后面,但对于SELECT中列的别名都可以使用。 MySQL中 1. > SELECT COUNT(*) as num, role_main, AVG(hp_max) FROM heros -> WHERE hp_max>6000 -> GROUP BY role_main -> HAVING COUNT(*)>5 -> ORDER BY COUNT(*) DESC; +-----+-----------+-------------+ | num | role_main | AVG(hp_max) | +-----+-----------+-------------+ | 17 | 战士 | 7028 | | 10 | 坦克 | 8312.4 | | 6 | 法师 | 6417 | +-----+-----------+-------------+ 2. > SELECT COUNT(*) num, ROUND(AVG(hp_max+mp_max), 2) avg, ROUND(MAX(hp_max+mp_max), 2) max, ROUND(MIN(hp_max+mp_max), 2) min FROM heros -> WHERE (hp_max+mp_max)>7000 -> GROUP BY attack_range -> ORDER BY num DESC; +-----+---------+----------+---------+ | num | avg | max | min | +-----+---------+----------+---------+ | 36 | 8654.42 | 11036.00 | 7117.00 | | 26 | 7743.77 | 8737.00 | 7025.00 | +-----+---------+----------+---------+
作者回复: 在执行顺序上,SELECT字段在GROUP BY和HAVING之后,不过在SELECT字段之前,已经计算了聚集函数,也就是COUNT(*) as num。聚集函数的计算在GROUP BY之后,HAVING之前
2019-06-28447 - ack练习题 1.SELECT COUNT(*) AS num,role_main,AVG(hp_max) FROM heros WHERE hp_max > 6000 GROUP BY role_main HAVING num>5 ORDER BY num DESC; 2.SELECT COUNT(*) AS num,ROUND(MAX(hp_max+mp_max),2),ROUND(AVG(hp_max+mp_max),2),ROUND(MIN(hp_max+mp_max),2) FROM heros WHERE hp_max+mp_max > 7000 GROUP BY attack_range ORDER BY num DESC;
作者回复: 正确
2019-06-28320 - 丁丁历险记讲个段子 having 常用来做过滤掉那些跑来冒充程序员的人。 他们深深的震惊了我的认知。
作者回复: 哈哈
2019-11-07217 - 吃饭饭讲的很详细了,入门必备
作者回复: 谢谢!
2019-06-2810 - 安静的boywhere先对数据进行排序,group by再进行分组。让我对数据筛选和分组恍然大悟!
作者回复: 理解了HAVING和WHERE的区别,就了解了分组过滤和条件过滤。还有SELECT语句种的关键字的顺序:SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
2019-06-288 - 峻铭前面老师在评论中回复过,在group by分组和having筛选分组之间还有一步使用聚集函数进行计算,在目前看到的having都是对cout聚集函数结果的筛选,想试试对其他聚集函数的筛选,然后对训练1做了点小改动: select count(*) as c,role_main,avg(hp_max) as v from heros where hp_max > 6000 GROUP BY role_main HAVING c > 5 and v > 7000 order by c DESC;
作者回复: Good Job
2019-09-017 - bearHaving 部分精彩,赞👍
作者回复: 感谢
2019-08-175 - mickey有个错误: 文中“比如,我们想要按照英雄的主要定位、次要定位进行分组,查看这些英雄的数量,并按照这些分组的英雄数量从高到低进行排序。”的SQL语句:SQL: SELECT COUNT(*), role_main, role_assist FROM heros GROUP BY role_main, role_assist ORDER BY num DESC 在MySQL里会报错:[Err] 1054 - Unknown column 'num' in 'order clause' 要改为:SELECT COUNT(*) as num, role_main, role_assist FROM heros GROUP BY role_main, role_assist ORDER BY num DESC;
编辑回复: 您好,文章已进行更正,谢谢您的反馈。
2019-06-285 - mickey/* 1.筛选最大生命值大于6000的英雄,按照主要定位进行分组,选择分组英雄数量大于5的分组, 按照分组英雄数从高到低进行排序,并显示每个分组的英雄数量、主要定位和平均最大生命值。 */ SELECT count(*) as num, role_main, AVG(hp_max) FROM heros WHERE hp_max > 6000 GROUP BY role_main HAVING num > 5 ORDER BY num DESC num role_main AVG(hp_max) ------------------------------------ 17 战士 7028 10 坦克 8312.4 6 法师 6417 /* 2.筛选最大生命值与最大法力值之和大于7000的英雄,按照攻击范围来进行分组, 显示分组的英雄数量,以及分组英雄的最大生命值与法力值之和的平均值、最大值和最小值, 并按照分组英雄数从高到低进行排序,其中聚集函数的结果包括小数点后两位。 */ SELECT count(*) as num, ROUND(AVG(hp_max + mp_max), 2), MAX(hp_max + mp_max), MIN(hp_max + mp_max) FROM heros WHERE hp_max + mp_max > 7000 GROUP BY attack_range HAVING num > 5 ORDER BY num DESC num, ROUND(AVG(hp_max + mp_max), 2), MAX(hp_max + mp_max), MIN(hp_max + mp_max) ------------------------------------------------------------------------ 62 8272.53 11036 7025
作者回复: SQL正确,最后结果贴的不太完整
2019-06-2843