2012-05-11 37 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表达式的正确结果。 –

相关问题