학생 테이블, 학기, 과목테이블을 조인해서 학기마다 몇명이 과목을 수강하는지
해당과목을 패스했는지 패스 못했는지 카운트를 세고 싶습니다..
그래서 쿼리를 다음과 같이 짰고 결과는 이렇게 나왔습니다..
SELECT
COUNT(DECODE(SEM.GUBUN, '1-1', 1)) "1-1학기",
COUNT(DECODE(SEM.GUBUN, '1-2', 1)) "1-2학기",
COUNT(DECODE(SEM.GUBUN, '2-1', 1)) "2-1학기",
COUNT(DECODE(SEM.GUBUN, '2-2', 1)) "2-2학기",
FROM STUDENT STD, SEMESTER SEM, SUBJECT SUB
WHERE STD.GUBUN = SEM.GUBUN
AND SEM.SUBNAME = SUB.SUBNAME;
1-1학기 | 1-2학기 | 2-1학기 | 2-2학기 |
xx_11 | xx_12 | xx_21 | xx_22 |
SELECT COUNT(DECODE(GRADE, 'P')) "PASS", COUNT(DECODE((GRADE, "F")) "FAIL"
FROM STUDENT_HIST
GROUP BY GUBUN;
PASS | FAIL |
xx_p | xx_f |
근데 두 개의 테이블을 합쳐 다음과 같이 만들고 싶습니다.. 어떻게 해야할까요?ㅠㅠ
GUBUN | 학생 수 | PASS | FAIL |
1-1학기 | xx_11 | xx_p | xx_f |
1-2학기 | xx_12 | xx_p | xx_f |
2-1학기 | xx_21 | xx_p | xx_f |
2-2학기 | xx_22 | xx_p | xx_f |
※ 테이블 정보
STUDENT
NAME | STUNO | GUBUN |
SEMESTER
GUBUN | SUBNAME |
SUBJECT
SUBNAME | SUBNO | STUNO |
STUDENT_HIST
GUBUN | GRADE | STUNO |
테이블 설계가 전반적으로 좀 이상하네요.
일단 억지로 조인은 해보지만... 찜찜합니다.
이 상태에서의 조인은 논리적으로 맞질 않는 듯 합니다.
SELECT std.gubun , COUNT(*) cnt , COUNT(DECODE(his.grade, 'P', 1)) pass , COUNT(DECODE(his.grade, 'F', 1)) fail FROM student std , semester sem , subject sub , student_hist his WHERE std.gubun = sem.gubun AND sem.subname = sub.subname AND std.stuno = sub.stuno AND sem.gubun = his.gubun AND std.stuno = his.stuno GROUP BY std.gubun ;