我想让我的popular_query子查询删除dupe Place.id,但它不会将其删除。这是下面的代码。我尝试使用不同,但它不尊重order_by规则。如何查询连接列上具有唯一值的行?
SimilarPost = aliased(Post)
SimilarPostOption = aliased(PostOption)
popular_query = (db.session.query(Post, func.count(SimilarPost.id)).
join(Place, Place.id == Post.place_id).
join(PostOption, PostOption.post_id == Post.id).
outerjoin(SimilarPostOption, PostOption.val == SimilarPostOption.val).
join(SimilarPost,SimilarPost.id == SimilarPostOption.post_id).
filter(Place.id == Post.place_id).
filter(self.radius_cond()).
group_by(Post.id).
group_by(Place.id).
order_by(desc(func.count(SimilarPost.id))).
order_by(desc(Post.timestamp))
).subquery().select()
all_posts = db.session.query(Post).select_from(filter.pick()).all()
我与
print [x.place.name for x in all_posts]
[u'placeB', u'placeB', u'placeB', u'placeC', u'placeC', u'placeA']
我怎样才能解决这个测试打印输出?
谢谢!
如果您删除'group_by(Place.id)'子句并添加'distinct(Place.id)',它是否尊重排序?如果你使用'distinct',我会认为'group_by'将是不必要的。 – Nicholas
'self.radius_cond()'和'filter.pick()'你在别处定义的东西吗?我没有看到任何实际上使用'popular_query'的东西。 –