【发布时间】:2018-06-13 19:47:31
【问题描述】:
我有一门课程,学生按年份注册,他们有出勤记录,我需要从每年的总注册人数中知道有多少人实际参加了该课程,实现该目标所需的 SQL 查询是什么?
预期输出:
YEAR COURSE ENROLED ATTENDED
---- ------ ------- --------
2017 IT 3 2
2018 IT 2 0
Oracle 脚本示例:
--
DROP TABLE ATTENDANCE;
DROP TABLE ENROLMENT;
DROP TABLE STUDENT;
DROP TABLE COURSE;
--
CREATE TABLE COURSE (ID VARCHAR2(1), NAME VARCHAR2(20), PRIMARY KEY(ID));
CREATE TABLE STUDENT (ID VARCHAR2(1), NAME VARCHAR2(20), PRIMARY KEY(ID));
CREATE TABLE ENROLMENT (ID VARCHAR2(1), COURSE_ID VARCHAR2(1), STUDENT_ID VARCHAR2(1), YEAR VARCHAR2(4), PRIMARY KEY(COURSE_ID, STUDENT_ID, YEAR));
CREATE TABLE ATTENDANCE (ENROLMENT_ID VARCHAR2(1), PRIMARY KEY(ENROLMENT_ID));
--
INSERT INTO COURSE VALUES('1', 'IT');
INSERT INTO STUDENT VALUES('1', 'John');
INSERT INTO STUDENT VALUES('2', 'Mary');
INSERT INTO STUDENT VALUES('3', 'Peter');
INSERT INTO ENROLMENT VALUES('1', '1', '1', '2017');
INSERT INTO ENROLMENT VALUES('2', '1', '2', '2017');
INSERT INTO ENROLMENT VALUES('3', '1', '3', '2017');
INSERT INTO ENROLMENT VALUES('4', '1', '1', '2018');
INSERT INTO ENROLMENT VALUES('5', '1', '2', '2018');
INSERT INTO ATTENDANCE VALUES('1');
INSERT INTO ATTENDANCE VALUES('2');
COMMIT;
--
【问题讨论】:
-
从标题看起来像
oracle。 -
是的,数据库是Oracle
-
选择 E.YEAR、C.NAME、COUNT(S.ID) 从课程 C 注册 左加入注册 E 在 C.ID = E.COURSE_ID 左加入学生 S 在 E.STUDENT_ID = S。 ID GROUP BY E.YEAR, C.NAME ORDER BY E.YEAR, C.NAME;