我有两个有多对多关系的课程,Items
和Categories
。
类别具有相关值。
我想查询最高Items
(如果有的话)小于给定值的所有Categorie.value
。
到目前为止,我尝试过这样的查询:
from sqlalchemy.sql import functions
Session.query(Items).join(Categories,Items.categories).filter(functions.max(Categories.value)<3.14).all()
但在这种情况下,我收到(OperationalError) misuse of aggregate function max()
错误。
有没有办法进行此查询?
答案 0 :(得分:1)
您需要GROUP BY
和HAVING
而非WHERE
来过滤聚合。
Session.query(Items).join(Items.categories).group_by(Items.id).having(functions.max(Categories.value)<3.14).all()
编辑:要同时包含没有任何类别的项目,我相信您可以执行外部联接并在OR
子句中添加HAVING
:
Session.query(Items).outerjoin(Items.categories).group_by(Items.id)\
.having( (functions.max(Categories.value)<3.14) | (functions.count(Categories.id)==0) )\
.all()