2009-12-12 103 views
0

我有一個MS Access 2007數據庫,包含通過和未通過考試的記錄。MS Access類型加倍

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

'Passed'被用作布爾值,其中0失敗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正在返回您要求的,如果您正確編寫了SQL。

+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' –