数据库原理-数据查询 单表查询【二】

聚集函数

聚集函数:

  • 统计元组个数

    COUNT(*)

  • 统计一列中值的个数

    COUNT([DISTINCT|ALL]<列名>)

  • 计算一列值的总和(此列必须为数值型)

    SUM([DISTINCT|[ALL]<列名>)

  • 计算一列值的平均值(此列必须为数值型)

    AVG([DISTINCT|ALL]<列名>)

  • 求一列中的最大值和最小值

    MAX([DISTINCT|ALL]<列名>)

    MIN([DISTINCT|ALL]<列名>)

查询学生总人数

	SELECT COUNT(*)
	FROM Student;

查询选修了课程的学生人数

	SELECT COUNT(DISTINCT Sno)
	FROM SC;

计算1号课程的学生平均成绩

	SELECT AVG(Grade)
	FROM SC
	WHERE Cno='1'

查询选修1号课程的学生最高分数

	SELECT MAX(Grade)
	FROM SC
	WHERE Cno='1';

查询学生201215012选修课程的总学分数

	SELECT SUM(Credit)
	FROM SC,Course
	WHERE Sno='201215012' AND SC.Cno=Course.Cno

GROUP BY 子句分组

细化聚集函数的作用对象

  • 如果未对查询结果分组,聚集函数将作用于整个查询结果
  • 对查询结果分组后,聚集函数将分别作用于每个组
  • 按指定的一列或多列值分组,值相等的为一组

求各个课程号及相应的选课人数

	SELECT Sno,COUNT(Sno)
	FROM SC
	GROUP BY Cno;

image-20220501111531553

查询选修了3门以上课程的学生学号

	SELECT Sno
	FROM SC
	GROUP BY Sno
	HAVING COUNT(*)>3

查询平均成绩大于等于90分的学生学号和平均成绩

错误的SQL

	SELECT Sno,AVG(Grade)
	FROM SC
	WHERE AVG(Grade)>=90
	GROUP BY Sno;

因为WHERE子句中不能所有聚集函数作为条件表达式

正确的SQL

	SELECT Sno,AVG(Grade)
	FROM SC
	GROUP BY Sno
	HAVING AVG(Grade)>=90

HAVING短语与WHERE子句的区别

  • 作用对象不同
  • WHERE子句作用与基本表或视图,从中选择满足条件的元组
  • HAVING短语作用于组,从中选择满足条件的组

列出计算机系姓刘的同学的信息,按照学号大小排序

	SELECT *
	FROM Student
	WHERE Sdept='CS' AND Sname LIKE '刘%'
	ORDER BY Sno;

按系并区分男女统计各系学生的人数、并按照人数降序排序

	SELECT Sdept,Ssex,COUNT(Sno)
	FROM Student
	GROUP BY Sdept,Ssex
	ORDER BY COUNT(Sno) DESC;
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐