我是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表示重复访问的用户数。
你能帮帮我吗?提前致谢。
答案 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()