2017-09-02 83 views
-1

我想选择没有失败成绩的学生。对普通学生和非普通学生进行排序

Stud_id grade_1 grade_2 grade_3 RATE 
    123  1.5  3.00  2.00 regular 
    234  2.00  1.50  5.00 irregular 
    567  3.00  2.00  2.00 regular 

select COUNT(stud_id)WHERE grade BETWEEN 1 AND 3 AND NOT not grade IN(0,5)。

我得到所有普通学生的代码是这样的。

SELECT COUNT(DISTINCT stud_id FROM grade 
WHERE grade BETWEEN 1 AND 3 AND stud_id ='$student') 

但我的问题在这里已经失败等级也会算,因为他也传给其他年级学生。

Sample mysql picture

,你可以在图片中看到的学生与ID =“67453432”应该只将与“常规”状态出现,因为他不具有任何失败年级学生。而另一名学生因为有1个或更多失败分数而显示为“不规则”。

的结果应该是这样的

EXAMPLE ONLY!!! 
    if grade BETWEEN 1 AND 3 AND Dont have 0.00 OR 5.00 = REGULAR 
    BUT if GRADE BETWEEN 1 AND 3 AND HAVE 0.0 OR 5.00 = IRREGULAR 

    Stud_ID RATE 
    67453432 REGULAR 
    123  REGULAR 
    234  IRREGULAR 
    567  REGULAR 

回答

0

您可以通过下面的查询得到了不规则的学生:

SELECT stud_id, 'Irregular' 
FROM students 
WHERE grade IN (0,5); 

和普通学生通过下面的查询:

SELECT stud_id, 'Regular' 
FROM students 
WHERE grade BETWEEN 1 AND 3 
AND stud_id NOT IN (
    SELECT stud_id 
    FROM students 
    WHERE grade IN (0,5) 
); 

现在,你可以用UNION这两个查询来得到结果,例如:

SELECT stud_id, 'Irregular' 
FROM students 
WHERE grade IN (0,5) 

UNION 

SELECT stud_id, 'Regular' 
FROM students 
WHERE grade BETWEEN 1 AND 3 
AND stud_id NOT IN (
    SELECT stud_id 
    FROM students 
    WHERE grade IN (0,5) 
); 
+0

OH MY GOD!哦,我的上帝! IVE正在为此搜索并进行查询!非常感谢你!!!我如何给这百万喜欢? –

+1

@MikeAhrenRances你可以接受答案,如果t帮助你.. –

+0

是的!有用!谢谢你一百万次! :) 很有帮助! –