我有包含学生 ID、类(class)、学科、科目 ID、总分和已通过状态(1=通过,0=失败)的标记表。 我希望类(class)或类(class)中所有科目的 isPassed 状态为 1 的学生总数。 我的查询如下所示:
$pass = Marks::select('student_id')
->where('class_room_id', '=', 10)
->where('section_id', '=', 1)
->where('isPassed', '=', 1)
->distinct()
->get();
$passed = count($pass);
表格看起来像:
student_id subject_id isPassed
1001 100 1
1001 101 0
1001 102 1
1001 103 1
1001 104 1
1002 100 1
1002 101 1
1002 102 1
1002 103 1
1002 104 1
最佳答案
你的 SQL 查询应该是这样的:
SELECT COUNT(student_id)
FROM marks
WHERE class_room_id = 10
AND student_id NOT IN (SELECT student_id FROM marks WHERE class_room_id = 10 AND isPassed = 0)
嵌套查询 SELECT student_id FROM marks WHERE class_room_id = 10 AND isPassed = 0
选择给定类(class)中至少有一次测试 isPassed = 0
的所有学生。这些是您不需要的学生。
更新
好的,在获得您在评论中提供的所有信息后,这就是答案。
您要查找的查询是:
SELECT COUNT(DISTINCT student_id)
FROM tbl2
WHERE student_id NOT IN (SELECT student_id FROM tbl2 WHERE isPassed = 0)
它获取通过所有科目的学生人数。
嵌套查询是:
SELECT student_id FROM tbl2 WHERE isPassed = 0
它得到至少失败一次的学生。
用于演示的 SQLFiddle:http://sqlfiddle.com/#!9/a6baf4/1
关于mysql - 如何获得相对于同一表中另一列的不同值的列的不同计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51981444/