请求编写SQL查询:统计拥有多个会话用户的平均会话时长
嗨,刚入门SQL别担心,这题其实挺适合练手的,咱们一步步来搞定这个需求~
对应的SQL查询语句
SELECT userId, AVG(duration) AS average_session_duration FROM sessions GROUP BY userId HAVING COUNT(id) > 1;
语句拆解说明
我给你拆解开每个部分,方便你理解:
SELECT userId, AVG(duration) AS average_session_duration:咱们要选用户ID,还要用AVG()函数计算这个用户的平均会话时长,给结果列起个好读的别名average_session_duration,这样查出来的结果更清晰。FROM sessions:指定咱们要查的表就是你说的sessions表啦。GROUP BY userId:把所有会话记录按用户ID分组,这样同一个用户的所有会话就会被归到一组里。HAVING COUNT(id) > 1:这一步是筛选分组后的结果,只保留会话数量大于1的用户。这里要注意哦,不能用WHERE,因为WHERE是用来筛选单条记录的,而HAVING才是用来筛选分组后的结果的。COUNT(id)是统计每个用户的会话总数,因为id是主键不会有空值,用COUNT(*)也能达到同样的效果。
另外补充个小细节:因为你的表中duration是NOT NULL的,所以AVG(duration)计算的时候不会有忽略空值的问题,结果会很准确~
内容的提问来源于stack exchange,提问作者tranc3nd1
相关产品推荐
相关产品推荐

