在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
答案 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
)