mysql - 如何获得相对于同一表中另一列的不同值的列的不同计数?

标签 mysql laravel

我有包含学生 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/

相关文章:

laravel - 如何为laravel迁移指定文件夹?

mysql - 表中是否可以有切换 UNIQUE 索引?

java - 在logstash中使用jdbc输入插件时的时间变化

php - Windows 和 Laravel 上的 Memcached

javascript - Laravel E-com 运费按公里计算

laravel - 无法为用户分配角色或权限(Laravel - nova 权限)

html - Laravel Blade : Checkbox sends 'null' value to database

PHP/MySQL - 基于最后一个数据库列的排名

mysql - MySQL 中相同月份/不同年份的时间戳比较

MySQL游标只返回一条记录