问题描述:
思路:
因为有进直播间时间,和出直播间人数。所以我可以统计,进来一个是不是人数就会加1,出去一个,人数就会减1。
所以可以给进直播间的时间标记一个1,出直播间的时间标记一个-1
可以借助union all,不能是union all,因为进来可能时间一样,直播间id一样,但是不能去重,毕竟进来一个就会算作一个人
利用窗口函数,累加sum的是最初的行到当前行,每一行都计算一次这个user_change
窗口函数中over(partition by live_id order by envent_time)这个不写range between…and…也会自动默认最初的到当前值
这里需要学习的事情:
1、 这个题的解决思路,用数字代表计算人数,最后统计数字
2、 另外就是union的使用,两个表union的时候,是按照上面那个表的列名字去用作
最终表的列名字,并且两个表的列的个数,每一列的属性类型都要一一对应
select
user_id,
live_id,
in_datetime event_time,
1 user_change
from live_events
union all
select
user_id,
live_id,
out_datetime,
-1
from live_events