MySQL如何选择字段的记录并不具备所有必需的值

时间:2016-06-25 05:37:42

标签: mysql

在MySQL中,如何选择具有特定字段的记录并未涵盖所有必需值?

例如,在以下记录中,一些学生完成了连续编号的作业,如s1从1到5完成,s4从1到7完成,但s1和s4具有不同的MAX NUMBER分配。有些学生完成了非连续编号的作业,例如s2和s3。如何选择已完成连续作业的学生,​​无论最大数量是多少?

[[更多条件,对不起!]]我还需要一个列和条件来满足我的实际工作,例如“失败”列,其中1表示失败,0表示通过。

与原始条件一起,我还想排除那些未能完成一项或多项作业的学生,​​即failed必须为0。

在添加了failed列的以下记录中,我只想选择学生1,因为学生4的作业失败(尽管他的作业编号也是连续的)

id student_id assignment_done failed

1 s1 1 0

2 s1 2 0

3 s1 3 0

4 s1 4 0

5 s1 5 0

6 s2 2 0

7 s2 4 0

8 s3 1 0

9 s3 5 0

10 s4 1 0

11 s4 2 0

12 s4 3 0

13 s4 4 0

14 s4 5 0

15 s4 6 0

16 s4 7 1

3 个答案:

答案 0 :(得分:1)

Select student_id from STUDENT group by student_id having count( assignment_done) = max(assignment_done);
+------------+
| student_id |
+------------+
| s1         |
| s4         |
+------------+
2 rows in set (0.00 sec)

答案 1 :(得分:1)

试试这个:

SELECT student_id, 
       COUNT(CASE failed
             WHEN '0' THEN 1
             ELSE NULL
             END) as failedCount
FROM #yourTableName(e.g, students) 
GROUP BY student_id
HAVING COUNT(assignment_done) = MAX(assignment_done)
   AND
       MAX(assignment_done)=failedCount;

答案 2 :(得分:0)

以简单的方式,您可以使用下面的SQL查询

SELECT distinct student_id FROM Students A
WHERE A.student_id in (
    SELECT S.student_id
    FROM Students S
    GROUP BY S.student_id
    HAVING COUNT(*) =5
)