2012-05-11 42 views
0

我在計算這條SQL語句時遇到了一些困難。SQL計數()沒有給出想要的結果

這是表的模式。

studentID |subjectID | attendanceStatus | classDate | 
1234567  ...   1    ..... 
1234567  ...   0 

基本上我想算基礎上,studentID出席率和列這樣

studentID | subjectID | attendancePercentage 

attendancePercentage顯示它們是0 /參賽作品總數爲學生人數

這裏是我所做的,並沒有給出預期的結果。

SELECT studentID, COUNT(attendanceStatus = 0) AS Absent, 
COUNT(attendanceStatus = 1) As Present 
FROM attendance WHERE studentID = '1234567'; 

失敗。

我希望我能夠理解我正在努力實現的目標。

+0

在除MySQL以外的任何DBMS中,您需要一個GROUP BY子句列出選擇列表中的每個非集合列。它在MySQL中仍然是正確的;它可能不是100%必要的。 –

+0

「失敗」的說法不是很有幫助;說出你得到的結果會更好,以及爲什麼它是錯的。或者,在某些情況下,你得到的錯誤信息(和問題是,大概是,你得到了錯誤,而不是一個體面的結果)。 –

+0

謝謝。我會在下次更具體的時候嘗試。 – Jian

回答

1

我想你需要使用總和。

SELECT studentID , 
     SUM(CASE WHEN attendanceStatus = 0 THEN 1 
       ELSE 0 
      END) AS Absent , 
     SUM(CASE WHEN attendanceStatus = 1 THEN 1 
        ELSE 0 
       END) AS Present 
FROM attendance 
WHERE studentID = '1234567' 
+0

我會將這些SUM表達式中的每一個摺疊到一行上。我認爲在MySQL中你可以簡單地使用SUM(attendanceStatus = 0)和SUM(attendanceStatus = 1)',並且你會得到沒有CASE表達式的正確結果。 –

相關問題