при использовании «group_by» в запросе выберите элемент из каждой группы - PullRequest
0 голосов
/ 01 ноября 2011

Мне было интересно, как извлечь произвольный элемент из класса при запросе "group by". Например:

class Post(Base):
    id = Column(Integer, primary_key=True)
    created = Column(DateTime)
    comments = Column(Integer)
    creator = Column(Integer, ForeignKey('user.id'))
    anonymous = Column(Boolean)

class User(Base):
    id = Column(Integer, primary_key=True)

Как мне создать запрос, который выдает:

creator | total number of comments made on the creator's post | the time of the creator's last post

creator | total number of comments made on the creator's post | if any of the posts are anonymous

Основной запрос будет:

session = DBSession()
commsum = session.query(Post.creator, func.sum(Post.comments).label('totalcomments')).\
    group_by(Post.creator).subquery()
return session.query(User, commsum.c.totalcomments).\
    join(commsum, commsum.c.creator == User.id).all()

Что если я захочу вернуть 1) самую новую дату всех строк в каждом group_by (Post.creator) или 2) если какая-либо из строк имеет анонимный == True.

1 Ответ

0 голосов
/ 01 ноября 2011

В SQL вы должны иметь возможность делать что-то вроде:

SELECT Post.creator, 
       sum(Post.comments) total_comments
       max(Post.Created) latest_post
       max(Post.anonymous) any_anonymous
FROM Post
GROUP BY Post.creator
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...