【数据库和SQL学习笔记】4.SELECT查询2:排序(ORDER BY)、聚合函数、分组查询(GROUP BY)

数据库系统软件:SQL Server 2019 Express
操作系统:Windows 10


本节继续学select查询的用法。
本节用到的数据库: teaching.bak

将查询结果排序:ORDER BY

  • 我们使用 ORDER BY 关键词对查询结果进行排序。
  • ORDER BY 字段名 ASC:根据字段取值将结果集升序排列
  • ORDER BY 字段名 DESC:根据字段取值将结果集降序排列
  • 默认为升序(可省略ASC)

实例

例1:查询软件工程专业所有学生的信息,按年龄升序排列

select *
from t_student
where Major = '软件工程'
order by Age

在这里插入图片描述

例2:查询选修了c001课程的所有学生的考试成绩,包含学号和成绩两列,按成绩降序排列

select S# as 学号, Score as 成绩
from t_student_course
where C# = 'c001' and Score is not null
order by Score desc

在这里插入图片描述

例3:查询学生信息,按姓名字母序(拼音)升序排列

select *
from t_student
order by Sname asc

在这里插入图片描述

例4:查询软件工程专业所有学生信息,按年龄降序排列,同一年龄的按学号升序排列

select *
from t_student
where Major='软件工程'
order by Age desc, S# asc

这是一个多层次排序
在这里插入图片描述

总结
在这里插入图片描述

聚合函数

在这里插入图片描述

COUNT

用法:

  • COUNT(*):统计表中记录的总数
  • COUNT(列名):统计某列中非空值的个数
  • COUNT(DISTINCT 列名):去重计数

例1:查询课程的总数

select count(*)
from t_course

select count(C#)
from t_course

因为C#列没有非空值,所以对这一列计数等同于 count(*)
在这里插入图片描述

例2:查询选修了课程的学生的总数

select count(distinct S#)
from t_student_course

在这里插入图片描述

MAX、MIN

例:查询学生的最大年龄和最小年龄

select max(Age) as 最大年龄, min(Age) as 最小年龄
from t_student

在这里插入图片描述

SUM、AVG

例:查询2012001号学生选修的课程的考试总分以及平均分

select sum(Score) as 考试总分, avg(Score) as 平均分
from t_student_course
where S#=2012001

SUM、AVG仅仅适用于数值型数据的计算
在这里插入图片描述

分组查询:GROUP BY

在实际工作中,常常需要对数据按照某种规则进行分组,并且对各个组进行统计分析(如求均值、求和、计数等)。
分组查询聚合函数是配对存在的。
分组关键词:GROUP BY 列名

例1:查询男生、女生的人数

select Sex as 性别, count(*) as 人数
from t_student
group by Sex

count后面的星号可以换成任意不含空值的列名
在这里插入图片描述

例2:查询各个专业男生、女生的人数

select Major as 专业, Sex as 性别, count(*) as 人数
from t_student
group by Major, Sex

如果Major被打乱了,可以在最后加order by排序。
在这里插入图片描述

筛选条件:HAVING子句

当需要根据某些条件对分组进行筛选时,可利用HAVING子句。
关键词:
GROUP BY 列名
HAVING 筛选条件

例1:
①查询每一名学生的选课门数

select S# as 学号, count(*) as 选课门数
from t_student_course
group by S#

在这里插入图片描述


②查询选课门数超过3门的学生的学号和选课门数
思路:
1、根据学号进行分组
2、筛选出选课记录大于3条的分组
3、对筛选后的分组查询其学号和选课门数

select S# as 学号, count(*) as 选课门数
from t_student_course
group by S#
having count(C#)>=3

在这里插入图片描述

例2:查询考试平均分超过80分的学生的学号

select S# as 学号, avg(Score) as 平均分
from t_student_course
group by S#
having avg(Score)>=80

在这里插入图片描述

总结
GROUP BY 进行分组
HAVING 对分组进行筛选
GROUP BY常与聚合函数一起使用
注意,一旦使用group by,select子句中 字段名使用受限,如下图所示:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值