Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql中使用count函数返回0_Sql - Fatal编程技术网

如何在sql中使用count函数返回0

如何在sql中使用count函数返回0,sql,Sql,我有以下sql查询,它返回三年级学生在测试中所做的操作。 学生1在考试中得了0分,所以我的查询结果是只返回两个学生的成绩。我如何在结果中包含0分 select u.uno, u.fname, u.lname, count(q.qno) as Test1 from ((users u LEFT OUTER JOIN userresponse ur on ur.uno = u.uno) left outer join question q on q.correctanswer = ur.respon

我有以下sql查询,它返回三年级学生在测试中所做的操作。
学生1在考试中得了0分,所以我的查询结果是只返回两个学生的成绩。我如何在结果中包含0分

select u.uno, u.fname, u.lname, count(q.qno) as Test1 from ((users u
LEFT OUTER JOIN userresponse ur on ur.uno = u.uno) left outer join
question q on q.correctanswer = ur.response and q.qno = ur.qno and
q.eno = ur.eno) where q.eno = '1' group by u.uno, u.fname, u.lname

ur.eno是考试1,然后问题编号和考试编号被联接,q.CoreTanswer=ur.response检查用户答对了哪些问题ur.uno=u.uno只是联接表。

如果我正确理解了您的数据库模式,那么第三个学生(应该得到0结果)在userresponse表中没有对应的行?一个普通的(“内部”)连接,如您正在使用的连接,将删除userresponse表中没有行可连接的学生。另一方面,外部联接将保留行,即使在另一个表中没有要连接的行。因此,应该在表用户和表userresponse之间使用外部联接

编辑:

类似于此(未经测试):

在ON之后添加加入条件,在WHERE之后添加附加条件。第一个外部联接将保留所有学生,但对于没有响应的学生,userresponse列中的值为null。第二个外部联接仍将保持学生没有回答,问题表列中的值为空


请注意,您需要将COUNT(*)更改为COUNT(question.qno),因为COUNT(*)计算行数,每个没有回答的学生现在在结果中都有一行。

用于哪个数据库?这就是为什么不使用ANSI-89连接语法(您的查询)--没有外部连接支持,但是子选择是等效的(但不太首选--有效地关联子查询)。@OMGPonies-大多数数据库中都有不推荐的外部连接功能(通常基于用
+
*
修饰比较),但我同意,搬到美国国家标准化协会(ANSI)会好得多joins@Damien_The_Unbeliever:有,但它们也是特定于供应商的,这是正确的,学生3的答案将为空,因为他的答案都与问题不匹配。正确答案我查了一下外部连接并尝试了q.correctanswer=ur.response(+),但它给了我一个错误。我无法让它工作。我使用(userresponse ur left outer join question q.correctresponse=ur.response)然后需要包含需要与userresponse表连接的用户表。我不明白你的格式。
SELECT user.uno, user.fname, user.lname, 
       (COUNT(question.qno)*5)/75 as TESTRESULT1
  FROM ((user LEFT OUTER JOIN userresponse ON ....)
        LEFT OUTER JOIN question ON ....)
 WHERE
    ....
GROUP BY user.uno, user.fname, user.lname