Я уже некоторое время играю с кодом, и я столкнулся с проблемой, когда я должен получить количество определенных полей, где среднее значение превышает определенную сумму, сгруппированных по двум полям из разных таблиц
Вот мой Кодекс и ожидания
SELECT C.Course,S.Name, COUNT(*) as Average FROM Students S
INNER JOIN Student_Modules SM ON
SM.StudentID = S.ID
INNER JOIN Courses_Template C
ON C.ID = SM.CourseID
Group by C.Course,S.Name
Having AVG(SM.Percentage_Obtained) > 80
Это возвращает мне строки, содержащие название курса, имя студента и количество процентов выше 80%.
Это считается для меня "количеством студентов, прошедших курс". Я хотел бы знать, как заставить этот запрос дать мне количество студентов, которые прошли курс вместо количества модулей, которые прошел студент, и если это возможно
РЕДАКТИРОВАТЬ 1:
СТУДЕНЧЕСКИЙ ПЛАН
CREATE TABLE Students
(ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
,StudentNumber VARCHAR(20)
,Name VARCHAR(40)
,Surname VARCHAR(40)
,Student_ID VARCHAR(13)
,Languages VARCHAR(200)
,[Address] Varchar (512)
,Contact_Number varchar(20)
,Email Varchar (150)
,Days_Absent INT
,Student_Web_Username varchar(40)
,Student_Web_Password varchar(MAX)
,BranchID int
,Constraint FKStudentBranch FOREIGN KEY (BranchID) REFERENCES Branches(ID)
,CONSTRAINT Unq_StudentNumber UNIQUE (StudentNumber)
,CONSTRAINT Unq_Student_ID UNIQUE (Student_ID));
STUDENT_MODULE LAYOUT
CREATE TABLE Student_Modules
(ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
,ModuleID INT
,StudentID INT
,CourseID INT
,Percentage_Obtained INT Check (Percentage_Obtained >= -1 AND Percentage_Obtained <= 100)
,CONSTRAINT FKStudentModulesChosen FOREIGN KEY (ModuleID) REFERENCES Modules_Template(ID) ON DELETE CASCADE
,CONSTRAINT FKStudentModules FOREIGN KEY (StudentID) REFERENCES Students(ID) ON DELETE CASCADE);
COURSES_TEMPLATE LAYOUT
CREATE TABLE COURSES_TEMPLATE
(ID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED
,Course VARCHAR(40)
,Price SMALLMONEY CHECK(Price > 0)
,BranchID INT
,CONSTRAINT FKCourseBranches FOREIGN KEY (BranchID) REFERENCES Branches(ID) ON DELETE CASCADE);