T-SQL

问题:
统计分析本班男生的平均成绩和女生的平均成绩,如果男生的平均成绩高于女生则输出“男生成绩优于女生”,并显示男生第一名的信息。否则输出“女生成绩优于男生”
,并显示女生第一名的信息。
题目:在 StuScore 表中如果学生的平均成绩没有达到80分,便给每位同学的数学成绩加1分,然后再次判断平均成绩是否达到80分,否则继续加分,这样反复加分,直到其平均成绩超过80分。

思路:
第一步,计算 StuScore 表中学生的平均成绩。
第二步,如果平均成绩没有达到80分,执行加分操作。
第三步,循环判断。


<pre name="code" class="sql">CREATE DATABASE  Students
GO

--使用数据库
USE Students
GO
--学生信息表
CREATE TABLE StuInfo
(
	StuNo char(5) primary key,
	StuName varchar(20),
	StuSex char(2),
	StuAge int,
	StuSeat int
)
GO
--学生成绩表
CREATE TABLE StuScore
(
	StuID varchar(10) primary key,
	StuSex char(2),
	Chinese int,
	English int,
	Math int
)
GO
--添加数据
INSERT INTO StuInfo (StuNo, StuName, StuSex, StuAge, StuSeat)
SELECT 'S2001', '张三丰', '男', 17, 1 UNION
SELECT 'S2002', '张无忌', '男', 15, 2 UNION
SELECT 'S2003', '梅超风', '男', 20, 3 

INSERT INTO StuScore (StuID, StuSex, Chinese, English, Math)
SELECT 'S2001', '男', 75, 80, 90 UNION
SELECT 'S2002', '男', 76, 56, 54 UNION
SELECT 'S2003', '女', 90, 92, 70 UNION
SELECT 'S2004', '女', 70, 72, 80 



SELECT * FROM Stuinfo
SELECT * FROM StuScore
--定义一个学生的座位编号的变量
declare @Seat int 
---使用select将查询的结果赋值给@Seat
select @Seat=StuSeat from StuInfo where StuName='张无忌'
--打印座位号
print @Seat
--查询出座位前后的同
select * from StuInfo where (StuSeat=@Seat-1) or (StuSeat=@Seat+1)


declare @maleAvgScore float 
declare @femaleAvgScore float 
select @maleAvgScore=avg((Chinese+English+Math)/3) from StuScore where StuSex='男'
select @femaleAvgScore=avg((Chinese+English+Math)/3) from StuScore where StuSex='女'
print '男生平均成绩:'+convert(varchar(10),@maleAvgScore)
print '女生平均成绩:'+convert(varchar(10),@femaleAvgScore)
if(@maleAvgScore>@femaleAvgScore)
begin
print '男生成绩优于女生'
select top 1*from StuScore where StuSex='男' order by (chinese+english+math) desc
end
else
begin
print '女生成绩优于男生'
select top 1*from StuScore where StuSex='女' order by (chinese+english+math) desc
end
---第一步,计算 StuScore 表中学生的平均成绩。
--第二步,如果平均成绩没有达到80分,执行加分操作。
--第三步,循环判断。declare @score float
select @score=avg((Chinese+English+Math)/3) from StuScore
print '此时的成绩是:'+convert(varchar(10), @score)
while (@score<80)
begin
update StuScore set Math=Math+1 where Math<100
select @score=avg((Chinese+English+Math)/3) from StuScore
end
---查询成绩
SELECT * FROM StuScore


 


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值