点击 不爱吃饭爱学习 关注我
“莫向外求。”
今日学习
(以下操作都是在pgAdmin完成)
一、对表进行聚合查询
什么是分组函数(聚合函数):
分组函数作用于一组数据,并对一组数据返回一个值。聚合函数和分组函数都是描述的同一个概念,就是多行查询结果 聚合计算成一个结果返回.
记住5个常用的聚合函数:
COUNT:计算表中的记录数(行数)
SUM:计算表中数值列中数据的合计值
AVG:计算表中数值列中数据的平均值
MAX:求出表中任意列中数据的最大值
MIN:求出表中任意列中数据的最小值
1.COUNT:计算表中的记录数(行数)
COUNT函数的结果根据参数的不同而不同。COUNT(*)会得到包含NULL的数据行数,而COUNT()会得到非NULL的数据行数。
2.SUM:计算表中数值列中数据的合计值
聚合函数会将NULL排除在外再计算。但COUNT(*)例外,并不会排除NULL。
3.AVG:计算表中数值列中数据的平均值
4.MAX、MIN计算最大值、最小值
MAX/MIN函数几乎适用于所有数据类型的列。SUM/AVG函数只适用于数值类型的列。
对日期计算最大值最小值
5.使用聚合函数删除重复值(distinct)
在聚合函数的参数中使用DISTINCT,可以删除重复数据。
所有的聚合函数都可以使用distinct
二、对表进行分组
GROUP BY子句就像切蛋糕那样将表进行了分组。在GROUP BY子句中指定的列称为聚合键或者分组列。由于能够决定表的切分方式,所以是非常重要的列。当然,GROUP BY子句也和SELECT子句一样,可以通过逗号分隔指定多列。
使用聚合函数和GROUP BY子句时需要注意以下4点:
① 只能写在SELECT子句之中
② GROUP BY子句中不能使用SELECT子句中列的别名
③ GROUP BY子句的聚合结果是无序的
④ WHERE子句中不能使用聚合函数
注意书写顺序:
1.SELECT→2. FROM→3. WHERE→4. GROUP BY
1.聚合键中包含NULL
聚合键中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。
2.同时使用where子句和group by子句
先根据WHERE子句指定的条件进行过滤,然后再进行汇总处理
GROUP BY和WHERE并用时SELECT语句的执行顺序:
FROM→WHERE→GROUP BY→SELECT
3.使用聚合函数和Group By的常见错误
错误一: 把聚合键之外的列名书写在SELECT子句之中
使用聚合函数时,SELECT子句中只能存在以下三种元素:
● 常数
● 聚合函数
● GROUP BY子句中指定的列名(也就是聚合键)
错误二:在Group BY子句中写了列的别名
注意: 在GROUP BY子句中不能使用SELECT子句中定义的别名。
错误三:Group BY子句有排序
注意:GROUP BY子句结果的显示是无序的。(每次执行结果排序都是随机的)
错误四:在Where子句中使用聚合函数
只有SELECT子句和HAVING子句(以及ORDER BY子句)中能够使用聚合函数。
4.Distinct和Group By:
在“想要删除选择结果中的重复记录”时使用DISTINCT,在“想要计算汇总结果”时使用聚合函数加GROUP BY。
三、为聚合结果指定条件
1.Having子句
书写顺序:
1.SELECT→2. FROM→3. WHERE→4. GROUP BY→5.HAVING
HAVING子句中能够使用的3种要素如下所示:
● 常数
● 聚合函数
● GROUP BY子句中指定的列名(即聚合键)更适合写在Where子句
注意:
WHERE子句=指定行所对应的条件
HAVING子句=指定组所对应的条件
1.聚合键所对应的条件不应该书写在HAVING子句当中,而应该书写在WHERE子句当中。
2.将条件写在WHERE子句中要比写在HAVING子句中的处理速度更快,返回结果所需的时间更短。
四、对查询结果进行排序
1.Order BY 子句默认升序
ORDER BY子句都需要写在SELECT语句的末尾。这是因为对数据行进行排序的操作必须在结果即将返回时执行。ORDER BY子句中书写的列名称为排序键。
书写顺序
1.SELECT→2. FROM→3. WHERE→4. GROUP BY→5.HAVING→6. ORDER BY
降序写法:
列名后面使用 DESC
2.指定多个排序键
规则是优先使用左侧的键,如果该列存在相同值的话,再接着参考右侧的键。当然,也可以同时使用3个以上的排序键。
ASC 升序
DESC 降序
3.ORDER BY子句中可以使用SELECT子句中定义的别名。
SQL语句执行顺序:
FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY
4.ORDER BY子句中可以使用的列
在ORDER BY子句中可以使用SELECT子句中未使用的列和聚合函数。但是GROUP BY中未使用的列,其不能使用,还是要在GROUP BY的约束下。
点个【分享、在看与点赞】
万丈高楼平地起