Mysql 如何选择仅具有n值的id

Mysql 如何选择仅具有n值的id,mysql,Mysql,我有一张学生课程完成情况表,其中包括学生从课程中获得的所有分数。成绩与学生ID配对,我需要选择在任何课程中只取得3分的学生作为他们的成绩 在撰写本文时,我的第一个也是最后一个直觉是这样编写查询: SELECT DISTINCT id FROM table WHERE grade = 3; 然而,它会返回所有以3为分数的学生,而不仅仅是那些只以3为分数的学生 我迷路了有两种方法可以解决这个问题。也许最简单的阅读方法是 SELECT DISTINCT id FROM table WHE

我有一张学生课程完成情况表,其中包括学生从课程中获得的所有分数。成绩与学生ID配对,我需要选择在任何课程中只取得3分的学生作为他们的成绩

在撰写本文时,我的第一个也是最后一个直觉是这样编写查询:

SELECT DISTINCT id
    FROM table
WHERE grade = 3;
然而,它会返回所有以3为分数的学生,而不仅仅是那些只以3为分数的学生


我迷路了

有两种方法可以解决这个问题。也许最简单的阅读方法是

SELECT DISTINCT id 
FROM table 
WHERE grade = 3
AND id NOT IN (SELECT id FROM table WHERE grade <> 3);
这会让每个人都有一个3,而没有任何非3的


可能还有其他更有效的方法。要知道哪种方法最有效,请分析、解释、分析。。。可以提供帮助。

您可以根据ID分组,并检查不是3的分数总和。这是因为在MySQL中,布尔表达式的值在false时为0,true时为1

SELECT id
       FROM table
       GROUP BY id
       HAVING sum(grade <> 3) = 0;