k_0711

2020-07-30   阅读量: 284

Mysql

单表查询(2)

当字段作为不同的分析角色使用时,可以对数据进行分类汇总

====================================================================

维度和度量

  • 维度:用来分组的分类字段,包括无序分类字段(姓名、性别、血型等)和有序分类字段(学历、职称、舱位等)

  • 度量:用来聚合运算的数值字段(年龄、数量、金额等)

常用的聚合函数

所有的聚合函数都会忽略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


30.6626 4 3 关注作者 收藏

评论(0)


暂无数据

推荐课程