SQL基础----聚合函数及group by、having、部分常见函数
作者:mmseoamin日期:2023-12-14
一、聚合函数及group by
- 标准语法
聚合函数类型:sum(),avg(),max(),min(), count()
- 在不使用group by 情况下,select后跟的全是字段名 或 全是聚合列(如sum(),min()...),不能" select 字段名,sum() "混搭。
- 在使用group by 情况下,select后可以跟“字段名,聚合列”,但是其中的字段名必须是group by 中所列的字段名,没列的字段名也是不能使用的。聚合列里的字段名就可以不是group by 包含的。
- sum、avg、max、min函数必须指定字段进行聚合运算,无法使用通配符,同时这些指定字段名的聚合函数都会忽略空值行。
- count(字段名)计算字段下的总行数,但是计算时将忽略空值的行;count(*)计算表中的总行数,不管某列是否有数值或者为空值;因此,count(*)适合计算表格行数,count(字段名)计算字段中非空的行数。
- group by 有数据去重功能,类似于distinct。但有区别,distinct是返回不同的行,group by 是先对特定的字段中相同的值分为一个区,然后再对字段去重分组。
- group by 子句有多个字段时,依据写的字段顺序依次对数据分区,因此group by 字段1,字段2与group by 字段2,字段1不一样。
- 依据洲分组,计算每个洲有多少个国家
-
二、having
- 只有使用了group by 子句后才能使用having子句,having子句不能脱离group by 子句单独使用,因为having子句本质上是对group by 分组的筛选。
- having子句中只能使用聚合函数和group by作为分组筛选的字段。
- having的表达式和where的表达式基本相同,但是having的表达式中可以使用聚合数,where的表达式中不可以,因为where是对原表的行数据进行筛选,having是对group by 分组后的数据筛选。
- 对行数据筛选用where,对聚合函数的数据筛选用having。