繁体   English   中英

如何在PostgreSQL中按DISTINCT user_ids数和GROUP BY日期计算列的AVG值

[英]How to calculate AVG value of column by number of DISTINCT user_ids and GROUP BY date in Postgresql

我希望按日期查找每位唯一身份用户的平均时长。

数据表

| date       | user_id | duration |
|------------|---------|----------|
| 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        |

预期收益

| date       | ave_duration_per_unique_user |
|------------|------------------------------|
| 2018-10-02 | 15                           |
| 2018-10-03 | 25                           |
| 2018-10-04 | 5                            |

下面的查询根据日期的总持续时间/日期的总条目数给出平均值。 该日期的条目总数应为该日期的唯一user_id数。

SELECT
  DISTINCT date,
  AVG(session_duration)
FROM
  my_table
GROUP BY
  date, distinct_id
ORDER BY
  date
| date       | ave_duration_per_unique_user |
|------------|------------------------------|
| 2018-10-02 | 10                           | // should be 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM