Я весь день пил кнопки, но не мог заставить этот запрос работать. У меня есть 3 студента, курсы и таблица зачисления, которые показывают, какие классы учащиеся зачислили в
В запросе необходимо получить все курсы, в которых учатся как минимум 2 учащиеся, которые заказываются по курсу с наибольшим количеством студентов
Я разработал, как получить подсчет числа учащихся в классе, но у него проблемы с фильтрацией заявок на> = 2 ученика
-- coursetable -----------------------------
CREATE TABLE StudentTable(
studentID VARCHAR(255) NOT NULL,
firstName VARCHAR(255) NOT NULL,
LastName VARCHAR(255) NOT NULL,
DOB DATE NULL,
CONSTRAINT pk_studentTable PRIMARY KEY(studentID)
);
-- coursetable -----------------------
CREATE TABLE CourseTable(
courseID VARCHAR(255) NOT NULL,
courseName VARCHAR(255) NOT NULL,
hoursPerWeek int(11) NULL,
startDate DATE NULL,
CONSTRAINT pk_courseTable PRIMARY KEY(courseID)
);
-- enrolment table --
CREATE TABLE EnrolmentTable(
studentID VARCHAR(255) NOT NULL,
CourseID VARCHAR(255) NOT NULL,
CONSTRAINT pk_enrolmentTable PRIMARY KEY(studentID, CourseID)
);
это запрос, который я могу сделать, показывая регистрацию всех классов, но он показывает, что один класс имеет только 1 учащегося. Мне нужно отображать только классы с => 2 зачисления
SELECT ct.CourseName AS Course_Name, COUNT(st.studentID) AS Students_Enrolled
FROM EnrolmentTable et
INNER JOIN courseTable ct ON ct.courseID = et.courseID
INNER JOIN studentTable st ON st.studentID = et.studentID
GROUP BY et.courseID;
Мне нужно использовать право подзапроса? но не уверен, как
Вы можете использовать HAVING
для фильтрации результата
SELECT ct.CourseName AS Course_Name, COUNT(st.studentID) AS Students_Enrolled
FROM EnrolmentTable et
INNER JOIN courseTable ct ON ct.courseID = et.courseID
INNER JOIN studentTable st ON st.studentID = et.studentID
GROUP BY et.courseID
HAVING Students_Enrolled> 1
ORDER BY Students_Enrolled DESC