我正在尝试查找每个用户会话中“向用户发送消息”事件的发生次数,并返回每个用户的最大会话数。因此,这意味着我想跟踪有多少个用户会话具有“向用户发送消息”事件,但是如果有必要,希望消除在同一会话中发生的重复?
我也在寻找所有用户的总用户会话数
我尝试找到这些值没有成功。我的桌子看起来像这样:
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;
首先过滤所需事件并消除重复项。
然后使用窗口功能添加计数。
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;