我有一个分数表,包括学生id、班级、部门、科目id、总分和iPassed状态(1=通过,0=失败)。我想在一个班级或部门的学生总数已通过的所有科目的状态1。我的查询如下所示:
$pass = Marks::select('student_id')
->where('class_room_id', '=', 10)
->where('section_id', '=', 1)
->where('isPassed', '=', 1)
->distinct()
->get();
$passed = count($pass);
这张table看起来像:
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
2条答案
按热度按时间fcy6dtqo1#
您可以使用聚合函数来获取每个组的计数
此查询将按返回一行
class_room_id
有价值的studentCount
. 如果只需要一个或几个教室,可以向查询中添加where筛选器。pcrecxhr2#
您的sql查询应如下所示:
嵌套查询
SELECT student_id FROM marks WHERE class_room_id = 10 AND isPassed = 0
选择给定班级中至少有一次考试的所有学生isPassed = 0
. 这些是你不需要的学生。更新
好的,在你在评论中提供了所有的信息之后,下面是答案。
您要查找的查询是:
它得到通过所有科目的学生人数。
嵌套查询是:
它让那些至少失败过一次的学生。
一把小提琴来演示:http://sqlfiddle.com/#!9/a6baf4/1号