单表查询2(ORDER BY子句、聚集函数、GROUP BY子句)

单表查询2

ORDER BY子句
可以按一个或多个属性排列。升序:ASC 降序:DESC,缺省为升序
对于空值,排序时显示的次序由具体系统实现来决定
例1.1:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列:

SELECT Sno,Grade,
FROM Cno='3'
ORDER BY Grade DESC;

聚集函数
计数:
COUNT([DISTINCT|ALL]*)
COUNT([DISTINCT|ALL]<列名>)
例1.2:查询学生总人数:

SELECT COUNT(*)
FROM Student;

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

SELECT COUNT(DISTINCT Sno)
FROM SC;

计算平均值:
AVG([DISTINCT|ALL]<列名>)
例1.4:计算1号课程的学生平均成绩

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

最大最小值:
MAX([DISTINCT|ALL]<列名>)
MIN([DISTINCT|ALL]<列名>)
例1.5:查询选修1号课程的学生最高分数:

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

计算总和:SUM([DISTINCT|ALL]<列名>)
例1.6:查询学生200215012选修课程的总学分数:

SELECT SUM(Ccredit)
FROM SC,Course
WHERE Sno='200015012' AND SC.Cno=Course.Cno;

在这里插入图片描述

GROUP BY 子句:细化聚集函数的作用对象
按指定的一列或多列值分组,值相等的为一组
例1.7:求各个课程号及相应选课人数:

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

查询结果:在这里插入图片描述
例1.8:查询学生人数大于100的系及对应的人数:

SELECT Sdept,COUNT(Sno)
FROM student
GROUP BY Sdept
HAVING COUNT(*)>100;

HAVING短语与WHERE子句的区别:
在这里插入图片描述
例1.9:查询平均成绩大于等于90分的学生学号和平均成绩:
SELECT Sno,AVG(Grade)
FROM SC
WHERE AVG(Grade)>=90
GROUP BY Sno;
该种解法是错误的,因为:在WHERE子句中是不能用聚集函数作为条件表达式
所以正确解法:

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

猜你喜欢

转载自blog.csdn.net/weixin_46880556/article/details/107961186