order_by with func.count

3,070 views
Skip to first unread message

Marcin Krol

unread,
Jun 15, 2010, 7:19:58 AM6/15/10
to sqlal...@googlegroups.com
Hello,

I have this query:

rsvp = session.query(Project.project,
func.count(Reservation.project_id)).join(Reservation.project).group_by(Project.project,
Project.id).order_by(Project.project)

>>> print rsvp
SELECT project.project AS project_project, count(reservation.project_id)
AS count_1
FROM reservation JOIN project ON project.id = reservation.project_id
GROUP BY project.project, project.id ORDER BY project.project

So far so good - but what if I want to order by column
"func.count(Reservation.project_id)"?

I can do this in SQL all right:

SELECT project.project AS project_project, count(reservation.project_id)
AS count_1
FROM reservation JOIN project ON project.id = reservation.project_id
GROUP BY project.project, project.id ORDER BY count_1 DESC

But how to do this in above sqla query?


--

Regards,
mk

--
Premature optimization is the root of all fun.

Marcin Krol

unread,
Jun 15, 2010, 9:23:37 AM6/15/10
to sqlal...@googlegroups.com
Hello,

OK I figured this out:

rsvp = session.query(Project.project, Project.id,
func.count(Reservation.project_id)).join(Reservation.project).group_by(Project.project,
Project.id).order_by(desc(func.count(Reservation.project_id))).all()

I'm not normally a vaseline man, but this is amazing: how did SQLA guess
*correctly* what I wanted here? I love this toolkit!

Reply all
Reply to author
Forward
0 new messages