我有一张学生课程结业表,其中包括学生从其课程中获得的所有成绩。成绩与学生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的学生。
我迷路了
答案 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;