2011-11-01 2 views
0

Мне было интересно, как извлечь произвольный элемент из класса при запросе с помощью «group by». Например:при использовании «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.

+0

Что вы получили в данный момент? Что вы пробовали? (Пожалуйста, уточните свой вопрос с этой информацией.) –

+0

еще ничего не пробовал, занят работой над другими задачами. Я просто искал решение, но не смог найти. –

ответ

0

В 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 
Смежные вопросы