Для каждого курса «CptS» определите процент студентов, которые не прошли курс. Предположим, что проходной балл составляет 2 или выше - PullRequest
0 голосов
/ 12 марта 2020
CREATE TABLE Course ( 
courseno   VARCHAR(7), 
credits    INTEGER NOT NULL, 
enroll_limit INTEGER, 
classroom   VARCHAR(10), 
PRIMARY KEY(courseNo), ); 

CREATE TABLE Student ( 
sID   CHAR(8),
sName   VARCHAR(30), 
major VARCHAR(10), 
trackcode   VARCHAR(10), 
PRIMARY KEY(sID), 
FOREIGN KEY (major,trackcode) REFERENCES Tracks(major,trackcode) );

CREATE TABLE Enroll ( 
courseno    VARCHAR(7), 
sID   CHAR(8), 
grade FLOAT NOT NULL, 
PRIMARY KEY (courseNo, sID), 
FOREIGN KEY (courseNo) REFERENCES Course(courseNo), 
FOREIGN KEY (sID) REFERENCES Student(sID) );

До сих пор мне удавалось создать два отдельных запроса, один из которых подсчитывает количество неудачных людей. А другой подсчитывает количество сдавших людей. У меня возникли проблемы с их объединением, чтобы получить количество пропущенных / неудачных людей. Для каждого курса.

SELECT course.courseno, COUNT(*) FROM course inner join enroll on enroll.courseno = course.courseno
WHERE course.courseno LIKE 'CptS%' and enroll.grade < 2
GROUP BY course.courseno;

SELECT course.courseno, COUNT(*) FROM course inner join enroll on enroll.courseno = course.courseno
WHERE course.courseno LIKE 'CptS%' and enroll.grade > 2
GROUP BY course.courseno;

Конечный результат должен выглядеть примерно так:

courseno  passrate
CptS451   100
CptS323   100
CptS423   66

1 Ответ

1 голос
/ 12 марта 2020

Вы можете сделать условное среднее для этого:

select 
    courseno,
    avg(case when grade > 2 then 100.0 else 0 end) passrate
from enroll
where courseno like 'CptS%'
...