Files
Database/Homework/Homework250515/Homework250515.sql
2025-11-06 09:53:12 +08:00

63 lines
2.1 KiB
Transact-SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 1. 统计离散数学的成绩分布情况,即按照各分数段统计人数
CREATE PROCEDURE sp_GetDiscreteMathGradeDistribution
AS
BEGIN
DECLARE @CourseName NVARCHAR(20) = N'离散数学';
DECLARE @TargetCno CHAR(8);
SELECT @TargetCno = Cno
FROM Course
WHERE Cname = @CourseName;
SELECT GradeCategory AS N'成绩段',
COUNT(*) AS N'人数'
FROM (SELECT CASE
WHEN Grade >= 90 AND Grade <= 100 THEN N'90-100 (优秀)'
WHEN Grade >= 80 AND Grade < 90 THEN N'80-89 (良好)'
WHEN Grade >= 70 AND Grade < 80 THEN N'70-79 (中等)'
WHEN Grade >= 60 AND Grade < 70 THEN N'60-69 (及格)'
WHEN Grade >= 0 AND Grade < 60 THEN N'<60 (不及格)'
END AS GradeCategory
FROM SC
WHERE Cno = @TargetCno) AS GradeDistribution
GROUP BY GradeCategory
ORDER BY CASE GradeCategory
WHEN N'90-100 (优秀)' THEN 1
WHEN N'80-89 (良好)' THEN 2
WHEN N'70-79 (中等)' THEN 3
WHEN N'60-69 (及格)' THEN 4
WHEN N'<60 (不及格)' THEN 5
END;
END;
Go
-- 2. 统计任意一门课的平均成绩
CREATE FUNCTION fn_GetAverageCourseGrade(@InputCno CHAR(8))
RETURNS DECIMAL(5, 2)
AS
BEGIN
DECLARE @AverageGrade DECIMAL(5, 2);
SELECT @AverageGrade = AVG(CAST(Grade AS DECIMAL(5, 2)))
FROM SC
WHERE Cno = @InputCno
AND Grade IS NOT NULL;
RETURN @AverageGrade;
END;
Go
-- 3. 将学生选课成绩从百分制改为等级制即A、B、C、D、E
CREATE PROCEDURE sp_UpdateSCGradeToClass
AS
BEGIN
BEGIN TRANSACTION;
UPDATE SC
SET Class =
CASE
WHEN Grade >= 90 AND Grade <= 100 THEN 'A'
WHEN Grade >= 80 AND Grade < 90 THEN 'B'
WHEN Grade >= 70 AND Grade < 80 THEN 'C'
WHEN Grade >= 60 AND Grade < 70 THEN 'D'
WHEN Grade >= 0 AND Grade < 60 THEN 'E'
END
WHERE Grade IS NOT NULL;
COMMIT TRANSACTION;
END;
Go