SQL根据等级查找学生姓名

时间:2018-02-02 18:22:59

标签: sql oracle

我正在尝试为每个具有一个以上“2”成绩的学生打印学生姓名。等级是CLASSSTUDENT表中的整数。 Oracle数据库。 代码到目前为止:

SELECT DISTINCT FIRSTNAME, LASTNAME 
FROM PERSON  
JOIN STUDENT ON PERSON.PERSONID = STUDENT.STUDENTID 
JOIN CLASSSTUDENT ON STUDENT.STUDENTID = CLASSSTUDENT.STUDENTID
WHERE FINALGRADE = 2;

这使得学生的成绩为“2”。我如何更改查询以获得超过一个“2”级的学生?

2 个答案:

答案 0 :(得分:1)

SELECT FirstName, LastName
FROM Person p
INNER JOIN Student s ON p.PersonID = s.StudentID
INNER JOIN (
    SELECT StudentID
    FROM ClassStudent
    WHERE FinalGrade = 2
    GROUP BY StudentID
    HAVING COUNT(*) > 1
) f ON f.StudentID = s.StudentID

或更简单:

SELECT FirstName, LastName
FROM Person p
INNER JOIN ClassStudent cs ON cs.StudentID = p.PersonID
WHERE cs.FinalGrade = 2
GROUP BY cs.StudentID, FirstName, LastName
HAVING COUNT(*) > 1

虽然我更喜欢前者,但我本人并不完全理解(可能只对主键进行分组,或者仅使用组来过滤记录......但实际上它只是“感觉”更多不知何故)。

答案 1 :(得分:0)

我相信它会是这样的:

 SELECT FIRSTNAME, LASTNAME, COUNT(*)
 FROM PERSON  
 JOIN STUDENT ON PERSON.PERSONID = STUDENT.STUDENTID 
 JOIN CLASSSTUDENT ON STUDENT.STUDENTID = CLASSSTUDENT.STUDENTID
 WHERE FINALGRADE = 2
 GROUP BY FIRSTNAME, LASTNAME
 HAVING COUNT(*) >= 2;