Попытка найти столбец общего числа уникальных вхождений, а также вернуть максимальное значение в этом столбце - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь найти количество вхождений события «сообщение пользователю» за сеанс пользователя, а также вернуть максимальное количество сеансов на пользователя. Таким образом, это означает, что я хотел бы отслеживать, сколько пользовательских сеансов имеет событие «сообщение пользователю», но хотел бы устранить дубликаты, которые происходят в одном сеансе, если это имеет смысл?

Я также ищу общее количество сеансов пользователей для всех пользователей

Мне не удалось найти эти значения. Моя таблица выглядит так:

user_id | event                      | user_session_id

1       | message to user            | 1
1       | message to user            | 1
1       | message from user          | 1
1       | message to user            | 1
1       | message from user          | 2 
1       | message to user            | 2  
1       | message to user            | 3
2       | message to user            | 1
2       | message to user            | 1
2       | message from user          | 1
2       | message to user            | 1
2       | message from user          | 2 
2       | message to user            | 2  

Мой ожидаемый результат будет примерно таким:

user_id | event                      | user_session_id | max_session_by_user | total_sessions 
1       | message to user            | 1               | 3                   | 5
1       | message to user            | 2               | 3                   | 5
1       | message to user            | 3               | 3                   | 5
2       | message to user            | 1               | 2                   | 5
2       | message to user            | 2               | 2                   | 5

Спасибо

РЕДАКТИРОВАТЬ: я добавил больше разъяснений о том, что яимел в виду, когда я ищу в отношении столбца событий

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Сначала отфильтруйте желаемое событие и исключите дубликаты.

Затем добавьте счет с помощью оконных функций.

SELECT user_id, event, user_session_id,
       count(*) OVER (PARTITION BY user_id) AS max_session_by_user,
       count(*) OVER () AS total_sessions
FROM (SELECT DISTINCT user_id, event, user_session_id
      FROM events_table
      WHERE event = 'message to user') AS q;
0 голосов
/ 01 октября 2019

Я не уверен, откуда берется столбец event. Но вы, кажется, хотите:

select user, user_session_id,
       count(*) over (partition by user) as max_sessions
from t
group by user, user_session_id;
...