Mysql SQL Count()未提供所需的结果
我在理解这个SQL语句时遇到了一些困难 下面是表的模式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
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表达式就可以得到正确的结果。