두가지의 카운트와 평균 값을 구하는 방법? 0 3 2,518

by 승후니 [SQL Query] [2012.04.06 19:51:34]


예를 들어 밑에와 같은 테이블이 있습니다.

=====================================================================

table명 : A

시험날짜  학생ID  합격여부  과목A   과목B   과목C
20120405   A   Y    70   80 90
20120405   B   Y    60   60 90
20120405   C   Y    70   60 60
20120405   D   N    40   30 50


여기서 다음과 같이 조회를 하고 싶습니다.

시험날짜 , 총응시생(건수),  합격건수,  합격자과목A평균,  합격자과목B평균,   합격자과목C평균


=====================================================================

제가 잘 모르겠는건 AVG로 과목별 평균을 구하려하면 총응시생이 그룹 카운트로 묶여서
4로 나누기가 돼서 합격자 평균이 잘못 나는거 같고요.

그래서 조건을 합격여부='Y' 인걸로 조회하면
총응시생 건수가 다르게 나오네요...

어떻게 조회 하면 되나요.. ㅠㅠ

감이 안오네요..;;;;

by camela [2012.04.07 00:20:23]
with A as
(
select '20120405' 시험날짜, 'A' 학생ID, 'Y' 합격여부, 70 과목A, 80 과목B, 90 과목C from dual union all
select '20120405' 시험날짜, 'B' 학생ID, 'Y' 합격여부, 60 과목A, 60 과목B, 90 과목C from dual union all
select '20120405' 시험날짜, 'C' 학생ID, 'Y' 합격여부, 70 과목A, 60 과목B, 60 과목C from dual union all
select '20120405' 시험날짜, 'D' 학생ID, 'N' 합격여부, 40 과목A, 30 과목B, 50 과목C from dual
)
select max(시험날짜) as 시험날짜
   , count(*) as 총응시생_건수
   , sum(decode(합격여부, 'Y',1)) as 합격건수
   , sum(decode(합격여부, 'Y', 과목A)) / sum(decode(합격여부, 'Y',1)) as 합격자과목A평균
   , sum(decode(합격여부, 'Y', 과목B)) / sum(decode(합격여부, 'Y',1)) as 합격자과목B평균
   , sum(decode(합격여부, 'Y', 과목C)) / sum(decode(합격여부, 'Y',1)) as 합격자과목C평균
from  A
;

by 손님 [2012.04.07 12:10:57]
select 시험날짜
    ,count(학생ID) 총응시생
    ,count(decode(합격여부,'Y',1)) 합격건수
    ,avg(decode(합격여부,'Y',과목A)) A평균 
    ,avg(decode(합격여부,'Y',과목B)) B평균
    ,avg(decode(합격여부,'Y',과목C)) C평균
from  a
group by 시험날짜

by 승후니 [2012.04.09 09:39:35]

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