当前位置:网站首页>【数据库和SQL学习笔记】4.SELECT查询2:排序(ORDER BY)、聚合函数、分组查询(GROUP BY)
【数据库和SQL学习笔记】4.SELECT查询2:排序(ORDER BY)、聚合函数、分组查询(GROUP BY)
2022-08-05 05:15:00 【takedachia】
数据库系统软件: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子句中 字段名使用受限,如下图所示:
边栏推荐
猜你喜欢
随机推荐
day8字典作业
[Go through 8] Fully Connected Neural Network Video Notes
The difference between the operators and logical operators
ES6 Set、WeakSet
【过一下7】全连接神经网络视频第一节的笔记
第四讲 反向传播随笔
第5讲 使用pytorch实现线性回归
轻松接入Azure AD+Oauth2 实现 SSO
基于Flink CDC实现实时数据采集(三)-Function接口实现
学习总结week3_3迭代器_模块
【论文精读】Rich Feature Hierarchies for Accurate Object Detection and Semantic Segmentation(R-CNN)
[Skill] Long-term update
The software design experiment four bridge model experiment
服务网格istio 1.12.x安装
BroadCast Receiver(广播)详解
Kubernetes常备技能
Flink Oracle CDC写入到HDFS
软件设计 实验四 桥接模式实验
Flink HA配置
机器学习(一) —— 机器学习基础