尝试查找总的唯一出现次数列以及 return 该列中的最大值

Attempt to find total unique occurrences column as well as return the max value in that column

我正在尝试查找每个用户会话中 "message to user" 事件的发生次数以及 return 每个用户的最大会话数。所以这意味着我想跟踪有多少用户会话有事件 "message to user",但如果有意义的话,我想消除在同一会话中发生的重复项?

我也在寻找所有用户的总用户会话

我试图找到这些值但没有成功。我的 table 看起来像这样:

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

谢谢

编辑:我在寻找事件列时添加了更多关于我的意思的说明

我不确定 event 列的来源。但你似乎想要:

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

首先过滤所需的事件并消除重复项。

然后使用 window 函数添加计数。

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;