如何在Postgresql中按不同用户ID数和按日期分组计算列的平均值

如何在Postgresql中按不同用户ID数和按日期分组计算列的平均值,sql,postgresql,Sql,Postgresql,我希望找到每个唯一用户数的平均持续时间(按日期) 数据表 |日期|用户id |持续时间| |------|-----|-----| | 2018-10-02 | 1 | 5 | | 2018-10-02 | 1 | 10 | | 2018-10-02 | 2 | 15 | | 2018-10-03 | 1 | 20 | | 2018-10-03 | 2 | 30

我希望找到每个唯一用户数的平均持续时间(按日期)

数据表

|日期|用户id |持续时间| |------|-----|-----| | 2018-10-02 | 1 | 5 | | 2018-10-02 | 1 | 10 | | 2018-10-02 | 2 | 15 | | 2018-10-03 | 1 | 20 | | 2018-10-03 | 2 | 30 | | 2018-10-04 | 2 | 5 | 预期收益

|日期|每个唯一用户的平均持续时间|| |------|---------------| | 2018-10-02 | 15 | | 2018-10-03 | 25 | | 2018-10-04 | 5 | 下面的查询根据日期的总持续时间/日期的条目总数给出平均值。日期的条目总数应为该日期的唯一用户ID数

SELECT
  DISTINCT date,
  AVG(session_duration)
FROM
  my_table
GROUP BY
  date, distinct_id
ORDER BY
  date
|日期|每个唯一用户的平均持续时间|| |------|---------------| |2018-10-02 | 10 |//应该是15 | 2018-10-03 | 25 | | 2018-10-04 | 5 |
您可以按如下方式进行计算:

select date, sum(duration) / count(distinct user)
from my_table
group by date;

我将注意到,我将以稍微不同的方式定义每个唯一用户的平均值。第一次约会是7.5+15/2=11.25。但是,这不是您描述的计算。

显示表defs和数据定义的要点,但这里是您要查找的查询:

testdb=# select date, avg(user_total)::bigint from (
    select date, user_id, sum(duration) user_total from t group by date, user_id)_
         group by date order by date;
    date    | avg 
------------+-----
 2018-10-02 |  15
 2018-10-03 |  25
 2018-10-04 |   5
(3 rows)

谢谢你的帮助。我曾尝试使用子查询除以不同的用户数,但在返回多个列时遇到了一个错误。这完全符合我的需要,而且更加简洁。谢谢