Как рассчитать AVG-значение столбца по номеру DISTINCT user_ids и дате GROUP BY в Postgresql - PullRequest
0 голосов
/ 12 октября 2018

Я хочу найти среднюю продолжительность по числу уникальных пользователей по дате.

Таблица данных

| 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                            |

В приведенном ниже запросе приводится среднее значение, основанное на общей продолжительности даты / общем количестве записей для даты.общее количество записей для даты должно быть числом уникальных идентификаторов пользователя для даты.

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                            |

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

gist, показывающий определения таблицы и определение данных здесь , но вот запрос, который вы ищете:

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)
0 голосов
/ 12 октября 2018

Вы можете сделать арифметику следующим образом:

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

Я отмечу, что я бы определил «среднее значение для каждого уникального пользователя» немного по-другому.Это будет (7,5 + 15) / 2 = 11,25 для первого свидания.Однако это не тот расчет, который вы описали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...