我有三个表A
,B
,C
,其中A
s有B
s和B
s有{{1} },就像一所学校开设课程(数学,文学),而开设课程则是学生。不论它们属于哪个C
,相同名称的B
都被认为是相同的,在相同A
下的C
也是如此。
我想查询B
个子集(简单的A
),以便我最多得到filter
个N
个,每个不超过{{1 }} B
。
我已经了解了许多获得每个类别的M
最高排名的方法,但是甚至无法(见下文)与我的C
一起使用...查询永远不会结束。
N
这是否可行?还是我应该只查询所有内容并循环使用Python,直到到达SQLite
?
编辑:
subq = sess.query(
C,
func.row_number().over(
partition_by=B.name,
order_by=C.grade).label('n')).\
filter(~A.name.startswith('something'), B.size==2, C.grade < threshold).\
subquery()
q_alias = aliased(Val, subq)
q = sess.query(q_alias).filter(subq.c.n <= M)