SQL server学习06-查询数据表中的数据(中)

目录

一,聚合函数 

1,常用聚合函数 

2,具体使用 

 二,GROP BY子句分组

1,基础语法 

2,具体使用

3,加上HAVING对组进行筛选 

4,使WHERE记录查询条件


 

汇总查询:在对数据库进行查询时,经常需要查询汇总信息,例如统计某门课不及格人数,得到不及格率,或者是统计课程的平均分等。

在SQL中,有5个聚合函数用于汇总等查询:Sum,Avg,Min,Max,Count。

一,聚合函数 

1,常用聚合函数 

常用的聚合函数有:Sum(),Avg(),Min(),Max(),Count()。

聚合函数
函数功能
Sum(expression)对数字表达式中的所有列求和,仅能再数值型列中使用
Avg(expression)对数字表达式中的所有列求平均值,仅能在数值型列中使用
Min(expression)求表达式中的最小值,不可以在bit数据类型中使用
Max(expression)求表达式中的最大值,不可以在bit数据类型中使用
Count(*)

计算所选定行的行数,即共有多少表中的记录参与了计算。一般用来统计个数。

如下,统计班级编号为1(1班)的学生人数👇

Count(expression)计算表达式中值的个数

2,具体使用 

它们的用法类似,都是将需要进行统计的列作为参数传入函数中(即小括号内)。

在之前创建的成绩表score中,得分get列是tinyint数据类型(数值型数据),可以对get列进行求和,平均,取最大,最小等操作。表结构如下👇

 

由于之前向成绩表中填充的成绩只有课程编号为1的课程成绩,接下来需要再填充课程编号2和3的学生成绩(成绩表是学生表和课程表的从表,需要先确保课程表中有相应的课程,学生表中有相应的学生),因此先填充课程表,之后再填充成绩表:

-- 插入课程表courses中的数据(这里可以多填点记录)
INSERT INTO courses(cno,cne,cpd,cct)
VALUES
('1','SQLserver DataBase Application principle','96','6'),  --SQL server 数据库应用原理
('2','C Language','86','3'),  -- C语言
('3','Introduction to Computer Science','86','3'),  --计算机科学导论
('4','Principle of Computer Organization ','80','3'), --计算机组成原理
('5','Computer Network','90','5')  --计算机网络


-- 插入成绩表score中的数据
INSERT INTO courses(cno,cne,cpd,cct)
VALUES
('1','2','90'),
('2','2','50'),
('3','2','77'),
('4','2','90'),
('5','2','66'),
('1','3','88'),
('2','3','78'),
('3','3','68'),
('4','3','58'),
('5','3','86')

小任务:统计学号为2,名字叫 lisi (李四)的同学所上课程的总成绩,平均值,最高分,最低分,如下👇

 

 二,GROP BY子句分组

1,基础语法 

需要使用到之前的查询语法:

SELECT 列名或表达式
--INTO 新表名   --创建新表并将结果集插入新表中
FROM 表名     --指定查询语句中所使用的表或视图
WHERE 查询条件   --设定检索条件。定义了源表中的行要满足SELECT语句的要求所必须达到的条件。只有符合条件的行才向结果集提供数据。即,不采用不符合条件的行数据。
GROUP BY 分组表达式  --分组子句
HAVING 分组条件   --和GROUP BY 一起使用,表示过滤组。
--ORDER BY 列名或表达式 ASC升序/DESC降序  --为查询结果排序。

其中:

  1. GROUP BY 子句将查询结果按分组表达式进行分组,值相等的的记录为一组
  2. 结果集中给每组(至多)产生一一行记录。
  3. 查询列表中的项只能来自GROUP BY 中的分组字段或聚合函数。
  4. HAVING 为结果集中的组设置条件,只有满足条件的组才能输出

如果需要每个班的学生人数,每门课的平均分等这样的统计数据,就需要对记录进行分组。同一组记录进行汇总统计。

 

2,具体使用


例如,统计每门功课的平均分:按照课程号分组。

SELECT cno AS 课程号,Avg(get) AS 课程平均分 FROM score GROUP BY cno

3,加上HAVING对组进行筛选 

如果还想要对分组后的结果进一步,如只查看课程平均分大于等于75分的课程,就需要在GROUP BY 语句的后面加上HAVING 用于筛选组。如下👇

SELECT cno AS 课程号,Avg(get) AS 课程平均分 FROM score
GROUP BY cno HAVING Avg(get)>=75

4,使WHERE记录查询条件

 有时在分组之前就需要对查询的结果集进行判断,因此需要加上之前所学的WHERE子句,记录结果集的查询条件。

例如,查询至少有一门课程成绩不及格的学生学号。如下👇

SELECT sno AS 学号,Count(*) AS 不及格门数
FROM score WHERE get<60
GROUP BY sno
HAVING Count(*)>=1

 需要注意的是,WHERE子句中不能有聚合函数,主要是因为,在 SQL 中,WHERE 子句用于过滤结果集中的行,而聚合函数是用于对一组行进行计算的函数。聚合函数的计算通常是在数据分组之后进行。

有问题请在评论区留言或者是私信我,回复时间不超过一天。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值