【问题标题】:Get count of Groupby (Sqlalchemy)获取 Groupby 的计数(Sqlalchemy)
【发布时间】:2014-04-12 09:37:09
【问题描述】:

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

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

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

session.query(UserTraffic.user_id,func.count(UserTraffic.X)).group_by(UserTraffic.user_id).all()

它返回数据为(用户 ID 和访问次数): (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 次访问的用户数为 1,访问 3 次的用户数为 2)

其中 x 是重复访问的数量,y 是重复访问的用户数量。

你能帮帮我吗?

提前致谢。

【问题讨论】:

    标签: sqlalchemy postgresql-9.1


    【解决方案1】:

    只需在其上添加另一个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()
    

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 2014-01-09
      • 1970-01-01
      • 2014-10-22
      相关资源
      最近更新 更多