得到Groupby(Sqlalchemy)的统计

时间:2014-04-11 19:18:35

标签: sqlalchemy postgresql-9.1

我是SQLAlchemy的新手,需要一些查询帮助。

我有一个包含200000条记录的usertraffic表,它有user_id和一个日期时间戳,上面有他们访问的时间。

我正在使用此查询按访问和显示计数对用户进行分组

session.query(UserTraffic.user_id,func.count(UserTraffic.X))。GROUP_BY(UserTraffic.user_id)。所有()

它将数据返回为(UserId和没有访问次数): (49386,1L),(49387,2L),(49388,5L),(49389,3L),(49390,4L),(49391,3L),(49392,2L)

我想得到的是得到这些的计数,例如: (x,y),(1,1),(2,2),(3,2),(4,1),(5,1) [因为没有一次访问的用户是1,没有3次访问的用户是2)

其中x表示没有重复访问,y表示重复访问的用户数。

你能帮帮我吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

只需在其上添加另一个GROUP BY即可。最简单的方法是使用subquery

subq = (session
        .query(UserTraffic.user_id, func.count(UserTraffic.X).label("cnt_X"))
        .group_by(UserTraffic.user_id)
        ).subquery("subq")

q = (session
        .query(subq.c.cnt_X, func.count(subq.c.user_id).label("cnt_users"))
        .group_by(subq.c.cnt_X)
        .order_by(subq.c.cnt_X)
        ).all()