如何选择仅具有n值的id

时间:2019-05-05 21:23:57

标签: mysql

我有一张学生课程结业表,其中包括学生从其课程中获得的所有成绩。成绩与学生ID配对,我需要选择在所有课程中仅获得3分的学生。

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

for(int i = 0; i < number_of_ships; i++)
{
    // Me() is a reference to the player
    // New ship on the heap
    Ship *new_ship = new Ship(random_, map_, Me());

    if(new_ship->alive()) // if it is still alive
      ship_vector.emplace_back(new_ship); // add it to the vector
    else
      delete new_ship; // free the allocation
}

但是,它将返回所有成绩为3的学生,不仅返回那些成绩仅为3的学生。

我迷路了

2 个答案:

答案 0 :(得分:1)

有两种方法可以解决此问题。也许最容易阅读的是

SELECT DISTINCT id 
FROM table 
WHERE grade = 3
AND id NOT IN (SELECT id FROM table WHERE grade <> 3);

这使每个拥有3个且没有非3的人。

可能还有其他更有效的方法。要了解哪种方法最有效,进行概要分析(解释,分析等)可以提供帮助。

答案 1 :(得分:0)

您可以按ID分组并检查不是3的成绩总和。之所以可行,是因为在MySQL中,布尔表达式在false时为0,在true时为1。

  SELECT ID
       从表
       按ID分组
       总和(等级<> 3)= 0;