sql - 对于每门“CptS”课程,找出课程不及格的学生百分比。假设及格分数为 2 或以上
问题描述
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
解决方案
您可以为此做一个条件平均:
select
courseno,
avg(case when grade > 2 then 100.0 else 0 end) passrate
from enroll
where courseno like 'CptS%'
推荐阅读
- rust - 如何实现递归节点结构?
- sql - SQL where 条件是否为每一行执行?
- php - 在控制器中使用自定义中间件
- json - 使用重复字段解组 JSON
- crystal-reports - 如何在水晶报表中求和?
- php - Ajax 调用 PHP 并返回带有 json_encode() 的数组始终为空
- node.js - 反应表。如何进行服务器端过滤。请求参数
- mysql - 从具有外键约束的表中删除行
- spring-boot - 如何将 ResourceServer 添加到现有的 spring 安全配置
- docker - 在 Openshift 中从 Dockerhub Registry 更新 ImageStream