聚合函数

函数名称 描述
COUNT() 计数
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
  1. -- 聚合函数
  2. /*COUNT:非空的*/
  3. SELECT COUNT(studentname) FROM student -- count(字段) 忽略字段为null
  4. SELECT COUNT(*) FROM student -- count(*) 不会忽略null
  5. SELECT COUNT(1) FROM student -- count(1) 不会忽略所有的null
  6. -- 从含义上讲,count(1) count(*) 都表示对全部数据行的查询。
  7. /*
  8. 很多人认为count(1)执行的效率会比count(*)高,
  9. 原因是count(*)会存在全表扫描,而count(1)可以针对一个字段进行查询。
  10. 其实不然,count(1)和count(*)都会对全表进行扫描,
  11. 统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。
  12. 而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。
  13. 下面它们之间的一些对比:
  14. 1)在表没有主键时,count(1)比count(*)快
  15. 2)有主键时,主键作为计算条件,count(主键)效率最高;
  16. 3)若表格只有一个字段,则count(*)效率较高。
  17. */

题目:

-- 查询不同课程的平均分,最高分,最低分
 -- 前提:根据不同的课程进行分组
 SELECT subjectname,AVG(studentresult) AS 平均分,MAX(StudentResult) AS 最高分,MIN(StudentResult) AS 最低分
 FROM result AS r
 INNER JOIN `subject` AS s
 ON r.subjectno = s.subjectno
 GROUP BY r.subjectno
 HAVING 平均分>80;
 /*
 where写在group by前面.
 要是放在分组后面的筛选
 要使用HAVING..
 因为having是从前面筛选的字段再筛选,而where是从数据表中的>字段直接进行的筛选的
 */