오라클 테이블 결과 값 합치기 0 1 560

by 구루구루구루 [2019.04.02 11:07:38]


학생 테이블, 학기, 과목테이블을 조인해서 학기마다 몇명이 과목을 수강하는지
해당과목을 패스했는지 패스 못했는지 카운트를 세고 싶습니다..

그래서 쿼리를 다음과 같이 짰고 결과는 이렇게 나왔습니다..


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
by 마농 [2019.04.02 13:16:05]

테이블 설계가 전반적으로 좀 이상하네요.
일단 억지로 조인은 해보지만... 찜찜합니다.
이 상태에서의 조인은 논리적으로 맞질 않는 듯 합니다.

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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입