当字段作为不同的分析角色使用时,可以对数据进行分类汇总
====================================================================
维度和度量
维度:用来分组的分类字段,包括无序分类字段(姓名、性别、血型等)和有序分类字段(学历、职称、舱位等)
度量:用来聚合运算的数值字段(年龄、数量、金额等)
常用的聚合函数
所有的聚合函数都会忽略null空值
聚合函数 | 说明 |
SUM() | 对一个数值字段求和 |
AVG() | 对一个数值字段求平均值 |
MAX() | 对一个数值或日期时间字段求最大值 |
MIN() | 对一个数值或日期时间字段求最小值 |
COUNT() | 对一个或多个字段计数 |
====================================================================
分组查询:select 字段1[,字段2,…] from 表名 [where 查询条件] group by 分组字段1[,分组字段2,…];
将查询结果按照一个或多个字段进行分组,多个字段之间没有先后顺序
字段值相同的为一组,对每个组内的多条记录进行聚合计算
分组聚合后,select子句中只能出现分组字段和聚合字段(跟分组字段一一对应的字段)
在mysql5.7.5或之后的版本,允许在select、having和order by中使用没有出现在group by中的字段
分组后筛选:select 字段1[,字段2,…] from 表名 [where 筛选条件] [group by 分组字段1[,分组字段2,…]] having 筛选条件;
having子句支持where子句中所有的运算符,having子句中的筛选字段必须是可以出现在分组结果中的字段
where与having的区别:
where子句作用于表,having子句作用于组
where条件查询的作用域是针对数据表进行筛选,而having条件查询则是对分组结果进行过滤
where在分组聚合计算之前筛选行,而having在分组聚合之后筛选分组的行,因此where子句不能使用聚合函数
select语句书写顺序
子句顺序 | 说明 | 是否必须使用 |
SELECT | 要返回的列或表达式 | 是 |
FROM | 从中检索数据的表或试图 | 仅从中检索数据时使用 |
WHERE | 行级过滤 | 仅对记录进行筛选时使用 |
GROUP BY | 分组字段 | 仅在分组聚合运算时使用 |
HAVING | 组级过滤 | 仅对分组进行筛选时使用 |
ORDER | 输出排序 | 仅对查询结果进行排序时使用 |
LIMIT | 限制输出 | 仅对查询结 果限制输出时使用 |
select语句执行顺序
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER → LIMIT
在第一节基础上 更新了函数和执行顺序:实操了字符数函数、时间函数、字段截取函数、interval函数等,除最后顺序实操因未导入数据库,导致无法执行