Mysql SQL Count()未提供所需的结果

Mysql SQL Count()未提供所需的结果,mysql,count,aggregate-functions,Mysql,Count,Aggregate Functions,我在理解这个SQL语句时遇到了一些困难 下面是表的模式 studentID |subjectID | attendanceStatus | classDate | 1234567 ... 1 ..... 1234567 ... 0 基本上,我想根据studentID计算出勤率,并将其显示在如下列中 studentID | subjectID | attendancePercentage attenda

我在理解这个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';
那失败了


我希望我能理解我想要实现的目标。

我想你需要用sum来代替

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' 

在除MySQL之外的任何DBMS中,都需要一个GROUPBY子句,列出select列表中的每个非加积列。在MySQL中仍然是正确的;这可能不是百分之百必要的。一句“失败”的话没有多大帮助;最好说明你得到了什么结果,以及为什么结果是错误的。或者,在某些情况下,您收到的错误消息(问题可能是,您收到的是错误,而不是一个体面的结果)。谢谢。下次我会更具体一些,我会把这些求和表达式折叠到一行。我认为在MySQL中,您可以简单地使用
SUM(attendanceStatus=0)
SUM(attendanceStatus=1)
,并且不使用CASE表达式就可以得到正确的结果。