【问题标题】:Get unique visitors by month/year按月/年获取唯一身份访问者
【发布时间】:2016-05-10 09:44:36
【问题描述】:

我有一个表格来跟踪我的应用的所有页面浏览量。

class Tracking_visits(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('users_user.id'), nullable=False)
    ts = db.Column(db.DateTime(timezone=True), default=datetime.datetime.utcnow().replace(tzinfo=pytz.UTC))

此代码适用于按月/年分组访问。

db.session.query(func.count(Tracking_visits.id), extract('month', Tracking_visits.ts).label('m'), extract('year', Tracking_visits.ts).label('y')).group_by('m', 'y').order_by('m', 'y').all()

现在我有另一个目标。我需要获得唯一访问的总数。一个用户可以进行多次访问,但在这种情况下,我只对每月的唯一访问次数感兴趣。我该怎么做?

我读到了一些关于 func.distinct() 的内容,但我不确定如何将它应用到上面的查询中。

【问题讨论】:

    标签: sql postgresql flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

    您只需要更改.query 参数,以便func.count()distinct() 上运行,distinct()Trackin_visits.user_id 作为参数:

    db.session.query(func.count(distinct(Tracking_visits.user_id)),
        extract('month', Tracking_visits.ts).label('m'),
        extract('year', Tracking_visits.ts).label('y'))
        .group_by('m', 'y')
        .order_by('m', 'y')
        .all()
    

    查询的文档可以在以下站点找到,如果您向下滚动到 Count(),您会找到一个以这种方式使用 distinct 的示例:http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html#the-query-object

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      相关资源
      最近更新 更多