2009-12-12 6 views
0

나는 통과하고 실패한 시험을 통과 한 기록이있는 MS Access 2007 DB가 있습니다.MS 액세스 번호를 두 자릿수로 변환

Student_id, Course_id, passed 
S001  C001  0 
S001  C001  1 
S002  C001  1 
S003  C001  0 

'통과'는 부울 값으로 사용되며 1은 통과했지만 1은 통과했지만 숫자는 저장됩니다.

코스 당 학생 당 시도 횟수를 표시하는 쿼리를 작성하고 싶습니다. 이것은 전달 된 숫자를 평균하여 수행 할 수 있습니다. S001은 평균 0.5, S002는 1, S003은 0입니다. 이는 S001이 2 회 시도한 후 S002가 1이되고 S003이 절대로 시도하지 않았 음을 나타냅니다.

SELECT Student_id, Course_id, avg(passed) 
FROM tbl 
GROUP BY Student_id, Course_id, passed 

문제는 : 평균의 모든 0 또는 1 내 생각은 수 (소수점 허용) double로 변환하지 않는다는 것입니다 수 있습니다. 십진수를 허용하는 데이터 형식으로 평균을 캐스팅하려면 어떻게해야합니까?

답변

3

나는이 문제를 보지 못합니다. 저도 같은 데이터로 테스트 테이블을 생성하고, 나는이 SQL을 실행하면

SELECT Student_id, Course_id, avg(passed) 
    FROM tbl 
    GROUP BY Student_id, Course_id 

나는이 결과를 얻을 :

Student_ID Course_ID AvgOfPassed 
     S001  C001 0.5 
     S002  C001 1 
     S003  C001 0

당신이 원래의 모든 행에 대한 행을 생산한다 게시 한 SQL을 당신의 원래 테이블, 실수로 GROUP BY에 PASSED를 포함 시켰습니다.

내 질문에 잘못된 결과가 나왔다고 생각하는 데이터를 볼 수 있습니다. 당신이 제공 한 데이터와 원하는 결과에 대한 설명을 가지고 정확히 을 요청했을 때 Access는 정확하게을 쓰면 분명합니다.

+0

- 유명한 호머를 삽입하십시오. "doh!" 여기에 소리 – Gerrit

+0

우리는 모두 거기에 있었어! –

1

코스 당 학생 당 시도 횟수를 표시하는 쿼리를 작성하고 싶습니다.

사용 : 평균은 의미있는 작업을 수행 곳

SELECT student_id, 
     course_id, 
     COUNT(*) AS num_attempts 
    FROM TBL 
GROUP BY student_id, course_id 

나는 볼 수 없습니다. 학생들이 통과하기를 원하는 경우 :

SELECT t.student_id, 
      t.course_id, 
      COUNT(*) AS num_attempts, 
      x.num_passed/COUNT(*) AS pass_percentage 
     FROM TBL t 
LEFT JOIN (SELECT student_id, 
        course_id, 
        COUNT(*) AS num_passed 
       FROM TBL 
      WHERE passed = 1 
      GROUP BY student_id, course_id) x ON x.student_id = t.student_id 
              AND x.course_id = t.courseid 
    GROUP BY t.student_id, t.course_id 
+0

이것은 또한 효과가 있지만 0 ... 1 범위 평균을 갖고 싶습니다. 정렬되지 않고 전달 될 수 있고 하나의 변수로 전달 될 수 있습니다. – Gerrit

+0

수정 됨 -'JOIN'을'LEFT JOIN'으로 변경했습니다. –