I am completely new to SQL where I have to write a user-defined function (UDF) that calculates a student's GPA for a given time frame. The Inputs are StudentId int
, ClassStartDateStart datetime
, and ClassStartDateEnd datetime
. Where the output should be the student's GPA for all classes that were taken between ClassStartDateStar
t and ClassStartDateEnd
. Also, supply the script to call this new function, passing it parameter values of your choice. I tried creating a code but don't know where to start. Here is what I have so far:
USE [Master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION GPAofStudents
(StudentID int,
ClassStartDateStart datetime,
ClassStartDateEnd datetime)
RETURNS decimal(3,2)
AS
BEGIN
DECLARE AvgGPA decimal(5,2);
SET AvgGPA = (SELECT AVG(Class_GPA)
FROM Students_Classes
WHERE Student_ID = StudentID
AND Start_Date > ClassStartDateStart
AND Start_Date <= ClassStartDateEnd
AND Class_GPA > 0;
RETURN AvgGPA;
END;
My table for the students is this:
CREATE TABLE [dbo].[Students_Classes](
[Student_Class_ID] [int] IDENTITY(1,1) NOT NULL,
[Student_ID] [int] NOT NULL,
[Class_ID] [int] NOT NULL,
[Start_Date] [date] NOT NULL,
[Assignment1] [int] NULL,
[Assignment2] [int] NULL,
[Assignment3] [int] NULL,
[Assignment4] [int] NULL,
[Class_GPA] [int] NULL,
CONSTRAINT [Student_Class_ID] PRIMARY KEY CLUSTERED
(
USE [A_University_Database]
INSERT INTO Students_Classes
([Student_ID],[Class_ID],[Start_Date],[Assignment1],[Assignment2],[Assignment3],
[Assignment4],[Class_GPA])
VALUES
('1', '5', '2010-05-30', '86', '92', '69', '99', NULL),
('1', '6', '2010-05-30', '86', '92', '69', '99', NULL),
('2', '2', '2010-05-30', '99', '85', '91', '79', NULL),
('2', '7', '2010-05-30', '99', '85', '91', '79', NULL),
('3', '3', '2010-10-01', '67', '91', '71', '100', NULL),
('3', '4', '2010-10-01', '67', '91', '71', '100', NULL),
('4', '5', '2009-02-21', '56', '93', '72', '86', NULL),
('4', '6', '2009-02-21', '56', '93', '72', '86', NULL)
What I have to do is create an aggregate inline function that displays the students class GPA. Do I need to create a stored procedure first that way the inputs are recognized?