POSTGRESQL:如何筛选以产生查询?
问题描述:
我有一个课本问题;列出每个班级的A级和A级人员的ID和姓名;POSTGRESQL:如何筛选以产生查询?
学生{studentID,名} 级{studentID,courseName,等级}
,我不知道如何过滤掉档次,这样我只显示一个学生。 到目前为止,我已经解决
SELECT Student.studentID, Student.name
FROM Student, Grade
WHERE Student.studentID = Grade.StudentID AND
Grade.grade = 'A' AND
Grade.grade != 'B' AND
Grade.grade != 'C' AND
Grade.grade != 'D' AND
Grade.grade != 'F';
有一个更清洁的方式,我可以筛选此。看起来有点乏味,我写了不平等4次。
答
您可以使用NOT EXISTS
类。我们让所有没有拿到A的学生过滤出来。
SELECT DISTINCT Student.studentID, Student.name
FROM Student
JOIN Grade
ON Student.studentId = Grade.studentId
WHERE NOT EXISTS (SELECT 1 FROM Grade G
WHERE G.grade !='A'
and G.studentID = Student.studentID
)
+0
此查询将为您提供所有没有成绩的学生。 – 2014-10-12 13:21:09
+0
@IgorRomanchenko,好点,我加入了主要的选择来处理。 – radar 2014-10-12 13:45:35
答
select studentid, s.name
from
student s
inner join
grade g using (studentid)
group by studentid, s.name
having bool_and(g.grade = 'A')
你的意思是在所有科目学生A级,也课程表中没有使用FROM – radar 2014-10-12 12:49:53
类对不起这是一个错误,我不知道为什么我写的课程,而不是 – seriallchiller 2014-10-12 12:53:23
级如果'等级'等于'A',它必须与其他任何东西不同。你不需要'!='条件 – 2014-10-12 12:54:53