选择并按一对多关系排序记录

时间:2016-07-28 17:43:01

标签: python sql sqlalchemy

考虑以下表格:

Student
-------
id
name

Assignment
----------
id
name

Grade
-----
id
student_id
assignment_id
grade

学生可以有多个成绩,对应不同的作业。

现在,我想选择记录来生成如下所示的表:

Name      Assignment 1      Assignment 2    Assignment 3
--------------------------------------------------------
Bob       55%               80%             23%
Suzy      90%               65%             100%

而且,我希望能够按其中一个等级(即作业1)进行排序

这可以用SQL完成吗?作为额外的奖励,可以使用flask-sqlalchemy吗?

我有一个想法,我需要做一个JOIN和ORDER BY,但我真的不知道该去哪里。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您使用的是SQLite,则必须使用SQL的最小公分母,这意味着您要考虑的每个作业都要加入:

SELECT
  name,
  Grade1.grade AS assignment1,
  Grade2.grade AS assignment2,
  Grade3.grade AS assignment3
FROM
  Student
  LEFT JOIN Grade AS Grade1 ON (Student.id = Grade1.student_id and Grade1.assignment_id = ...)
  LEFT JOIN Grade AS Grade2 ON (Student.id = Grade2.student_id and Grade2.assignment_id = ...)
  LEFT JOIN Grade AS Grade3 ON (Student.id = Grade3.student_id and Grade3.assignment_id = ...)
ORDER BY Grade1.grade

将其翻译成SQLAlchemy应该很简单。

答案 1 :(得分:0)

在Oracle中你可以考虑这样的事情

CustomObject[] data