尝试查找总的唯一身份发生次数列并返回该列中的最大值

问题描述 投票:0回答:2

我正在尝试查找每个用户会话中“向用户发送消息”事件的发生次数,并返回每个用户的最大会话数。因此,这意味着我想跟踪有多少个用户会话具有“向用户发送消息”事件,但是如果有必要,希望消除在同一会话中发生的重复?

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

我尝试找到这些值没有成功。我的桌子看起来像这样:

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

谢谢

编辑:我添加了关于事件列的详细说明

sql postgresql postgresql-9.6
2个回答
0
投票

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

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

0
投票

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

然后使用窗口功能添加计数。

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;
© www.soinside.com 2019 - 2024. All rights reserved.