2012-03-11 3 views
1

다음과 같은 sql 쿼리를 사용하면 테스트에서 만든 3 학년 학생을 반환합니다.
학생 1이 시험에서 0을 만들었 기 때문에 제 질문 결과는 두 학생의 성적 만 반환합니다. 어떻게 결과에 0을 포함시킬 수 있습니까?SQL에서 count 함수를 사용하여 0을 반환 할 수있는 방법

select u.uno, u.fname, u.lname, count(q.qno) as Test1 from ((users u 
LEFT OUTER JOIN userresponse ur on ur.uno = u.uno) left outer join 
question q on q.correctanswer = ur.response and q.qno = ur.qno and 
q.eno = ur.eno) where q.eno = '1' group by u.uno, u.fname, u.lname 

ur.eno이 시험 1, 다음 u.uno 그냥 테이블을 조인 = 사용자가 바로 ur.uno를 가지고 어떤 질문 번호와 시험 번호 가입하고 q.corectanswer = ur.response 검사를 질문.

+3

어떤 데이터베이스가 있습니까? 이것은 ANSI-89 JOIN 구문 (쿼리)을 사용하지 않는 이유입니다. OUTER JOIN 지원은 없지만, subselect는 동등한 것이지만 상관 관계가 낮은 하위 쿼리를 효과적으로 사용합니다. –

+0

@OMGPonies - 대다수의 데이터베이스에서 더 이상 사용되지 않는 외부 조인 기능이 있지만 (대개 '+'또는 '*'로 비교를 장식하는 것을 기본으로합니다) ANSI 조인으로 이동하는 것이 훨씬 낫다는 것에 동의합니다. –

+0

@Damien_The_Unbeliever : 예, 있습니다. 그렇지만 벤더에 따라 다르다. [SQL Server] (http://stackoverflow.com/questions/1428144/sql-what-does-mean), [Oracle] (http://stackoverflow.com/questions/2425960/oracle-old-joins-a-) 변환을위한 도구 - 스크립트) –

답변

3

데이터베이스 스키마를 올바르게 이해하면 세 번째 학생은 0 결과를 받아야하며 userresponse 테이블에는 해당 행이 없습니다. 사용중인 것과 같은 정상적인 "내부"조인은 userresponse 테이블에 조인 할 행이없는 학생을 삭제합니다. 반면에 외부 조인은 다른 테이블에 연결할 행이 없더라도 행을 유지합니다. 따라서 테이블 사용자와 테이블 userresponse 사이에 외부 조인을 사용해야합니다.

편집 : (하지 테스트)이 같은

뭔가 :

SELECT user.uno, user.fname, user.lname, 
     (COUNT(question.qno)*5)/75 as TESTRESULT1 
    FROM ((user LEFT OUTER JOIN userresponse ON ....) 
     LEFT OUTER JOIN question ON ....) 
WHERE 
    .... 
GROUP BY user.uno, user.fname, user.lname 

를 ON의 후 가입 조건을 추가하고 WHERE 후 추가 조건. 첫 번째 외부 조인은 모든 학생을 유지하지만 응답이없는 학생의 경우 사용자 응답의 열에 null 값을 유지합니다. 두 번째 외부 조인은 테이블 질문의 열에 null 값을 포함하여 응답없이 학생들을 계속 유지합니다.

COUNT (*)는 행 수를 계산하므로 응답이없는 각 학생에게는 결과에 행이 추가되므로 COUNT (*)를 COUNT (question.qno)로 변경해야합니다.

+0

올바른 학생 3은 null이 될 것입니다. 왜냐하면 그의 답변 중 어느 것도 정답과 맞지 않기 때문에 외부 조인을 찾아보고 q.correctanswer = ur.response (+)를 시도했지만 오류가 발생합니다. – user541597

+0

나는 이것을 작동시킬 수 없다. 나는 (userresponse ur 왼쪽에 외부 질문 q를 q.correctresponse = ur.response에 가입) 다음 userresponse 테이블과 조인해야 할 사용자 테이블을 포함해야합니다. 귀하의 서식을 이해하지 못합니다. – user541597

관련 문제