一、聚合函数及group by

  • 标准语法

聚合函数类型:sum(),avg(),max(),min(), count()

  1. 在不使用group by 情况下,select后跟的全是字段名 或 全是聚合列(如sum(),min()…),不能” select 字段名,sum() “混搭。
  2. 在使用group by 情况下,select后可以跟“字段名,聚合列”,但是其中的字段名必须是group by 中所列的字段名,没列的字段名也是不能使用的。聚合列里的字段名就可以不是group by 包含的。
  3. sum、avg、max、min函数必须指定字段进行聚合运算,无法使用通配符,同时这些指定字段名的聚合函数都会忽略空值行。
  4. count(字段名)计算字段下的总行数,但是计算时将忽略空值的行;count(*)计算表中的总行数,不管某列是否有数值或者为空值;因此,count(*)适合计算表格行数,count(字段名)计算字段中非空的行数。
  5. group by 有数据去重功能,类似于distinct。但有区别,distinct是返回不同的行,group by 是先对特定的字段中相同的值分为一个区,然后再对字段去重分组。
  6. group by 子句有多个字段时,依据写的字段顺序依次对数据分区,因此group by 字段1,字段2与group by 字段2,字段1不一样。
  • 依据洲分组,计算每个洲有多少个国家
  • 二、having

  1. 只有使用了group by 子句后才能使用having子句,having子句不能脱离group by 子句单独使用,因为having子句本质上是对group by 分组的筛选。
  2. having子句中只能使用聚合函数和group by作为分组筛选的字段。
  3. having的表达式和where的表达式基本相同,但是having的表达式中可以使用聚合数,where的表达式中不可以,因为where是对原表的行数据进行筛选,having是对group by 分组后的数据筛选。
  4. 对行数据筛选用where,对聚合函数的数据筛选用having。
  • 例子:查询总人口数至少为3亿的大洲和其平均GDP,其中只有gdp高于200亿且人口数量大于6000万或者gdp低于80亿且首都中含有三个a的国家的计入计算,最后按国家数从大到小排序,只显示第一行(显然,总人口数为3亿是聚合计算大洲的人口数后的条件筛选用having,一开始无大洲的总人口数,只有国家的人口数,其他条件并不需要计算什么数值后才能筛选用where)

三、SQL运行原理

四、常见部分函数

  • 数学函数&字符串函数

  • 日期时间函数

  • 数据类型转换函数

  • 条件判断函数