在Postgresql中对两个表使用横向

在Postgresql中对两个表使用横向,sql,postgresql,join,lateral-join,Sql,Postgresql,Join,Lateral Join,大家好 我需要一些帮助,弄清楚如何在Postgresql中跨两个表使用lateral。 我有两个表,student和course,还有一个函数student\u-course\u-assessment\u-info\u-by\u-course(student\u-id,course\u-id):course\u-assessment\u-info,它获取学生记录的id和课程记录的id,并获取该学生的一些成绩信息,比如他们的平均成绩。 我想使用这个函数来创建另一个名为students\u near

大家好

我需要一些帮助,弄清楚如何在Postgresql中跨两个表使用
lateral
。 我有两个表,
student
course
,还有一个函数
student\u-course\u-assessment\u-info\u-by\u-course(student\u-id,course\u-id):course\u-assessment\u-info
,它获取学生记录的id和课程记录的id,并获取该学生的一些成绩信息,比如他们的平均成绩。 我想使用这个函数来创建另一个名为
students\u near\u gpa\u minimum
的函数,该函数为所有在课程最低gpa的一定点数范围内的学生生成一个带有
student\u id、course\u id、gpa、minimum\u gpa
的表格

到目前为止,我了解到我应该能够使用
横向
过程在学生表上运行“每行”课程评估功能,但我很难弄清楚如何准确执行,因为评估功能需要学生id和课程id。 我下面的函数抱怨说课程栏不存在——这是真的。 我还需要反复阅读可用的课程

select * from 
  (select * from ontrack.student) students,
  lateral (select * from ontrack.student_course_assessment_info_by_course(students."id", "2b0df865-d7c6-4c96-9f10-992cd409dedb")) grades;
我知道通过查询所有数据然后用C++语言计算结果很容易解决,但是我想在SQL上得到正确的处理,我觉得如果我理解如何执行这种操作,那将是非常有益的。 再说一次,也许这真的是应该在sql之外完成的事情

感谢您的帮助,谢谢

select student.id, weighted_mark_average
from student
cross join course
cross join lateral course_assessment_info_by_student_id_and_course_id(student."id", course."id");

真管用

您可以使用以下函数获得所有学生和课程组合的分数

select * 
from student
cross join course
cross join lateral student_course_assessment_info_by_course(student."id", course."id")    
然而,它是课程和学生的每一次结合。如果您只对实际有效的课程和学生的组合感兴趣(因此学生学习了该课程),则必须有一个
课程\u学生
表,该表需要与
学生
课程
联接

编辑

如果您对学生实际学习的课程的分数感兴趣,请运行以下命令

select s.id, c.id, sc.grade
from student s
join student_course sc on s.id = sc.student_id
join course c on c.id = sc.course_id

美丽的我觉得这很管用。我确实有一个
学生课程
课程表。我将如何加入,以便它按照您的建议应用过滤器?