美文网首页
第一部分:解决产品型公司提出的SQL问题

第一部分:解决产品型公司提出的SQL问题

作者: Python_Camp | 来源:发表于2022-10-04 10:48 被阅读0次

第一部分:解决产品型公司提出的SQL问题
问题

Facebook提出的平均会话时间

拥有坚实的基础和关于SQL的知识将有助于你更有效地破解数据科学面试。这篇文章将讨论一个问题的陈述和它的解决方案,使用不止一种方法。如果你想让你的SQL概念和知识更加强大,那么你一定要阅读这篇文章。它一定会提高你的概念和解决问题的态度。

这是关于产品类公司面试时提出的SQL问题系列的第一篇文章。在这篇文章中,我使用StrataScratch平台来获取产品型公司中提出的问题。我将使用Postgres SQL数据库来解决这个问题。

这是Facebook在一次面试中提出的中等水平的问题。你可以在这里查看这个问题。问题的名称是Users By Average Session Time。

以下是该问题的细节。

面谈问题日期:2021年7月

问题说明。

计算每个用户的平均会话时间。一个会话被定义为页面加载和页面退出之间的时间差。为了简单起见,假设一个用户每天只有1个会话,如果当天有多个相同的事件,只考虑最近的page_load和最早的page_exit。输出user_id和他们的平均会话时间。

这是对数据的预览。表的名称是facebook_web_log,其中包含3列int类型的user_iddateTime类型的timestampvarchar类型的action

正如你所看到的数据。每个用户的page_load和page_exit的时间都是多天的。对于每一天,一个用户可以有不止一个page_load和page_exit时间。正如问题陈述中所给出的,对于每一天,我们必须考虑最新的page_load和最早的page_exit时间。然后我们要计算每个用户的平均会话时间。

我强烈建议你先去看问题链接,并尝试解决这个问题。在思考了问题的陈述后,你可以继续。我们将用两种方法解决这个问题。

方法一:使用Join

在一个查询中选择每个用户每天的最大页面加载时间。

select user_id, 
max(timestamp) as l_time , 
action from facebook_web_log 
where action in ('page_load')
group by (user_id, action, date(timestamp) )

2.然后在另一个查询中对每一个用户的每一天的最小退出时间进行查询。

select user_id, 
min(timestamp) as e_time , 
action from facebook_web_log 
where action in ( 'page_exit') 
group by (user_id, action, date(timestamp))
  1. 然后将上述两个查询加入到user_id中,通过取平均会话时间,即(加载时间-退出时间),并使用user_iddate(timestamp)的组来找到平均会话时间。

整个查询。


SELECT A.user_id, Avg(B.e_time — A.l_time) from
(select user_id, max(timestamp) as l_time , action from facebook_web_log where action in (‘page_load’) group by (user_id, action, date(timestamp) )) as A 

join
(select user_id, min(timestamp) as e_time , action from    facebook_web_log where action in (‘page_exit’) group by (user_id, action, date(timestamp))) as B
on A.user_id = B.user_id
group by A.user_id;

A.user_id分组。

输出将看起来像这样
方法2:使用子查询和案例

使用case子句在单行中
为每一个用户_id选择每一天的最大页面加载时间和最小页面退出时间。

select user_id,
max(case when action = ‘page_load’ then timestamp end) as l_time,    min(case when action = ‘page_exit’ then timestamp end) as e_time from facebook_web_log
group by user_id, date(timestamp)
  1. 把它作为一个子查询,然后应用group by函数来寻找平均值。

整个查询。

select user_id, avg(e_time - l_time) as avg_session_time from 
(select user_id,
max(case when action = 'page_load' then timestamp end) as l_time, min(case when action = 'page_exit' then timestamp end) as e_time from facebook_web_log

按用户ID、日期(时间戳)分组)作为A
按用户ID分组

avg(e_time - l_time)

不为空。
注意:date(timestamp)是一个函数调用,将从时间戳字段返回日期。

使用不同的方法来解决同一个问题,这确实是非常重要的。这种做法会让你对同一个问题有不同的思考方式,并想出更有效的解决问题的方法。

本文由mdnice多平台发布

相关文章

  • 第一部分:解决产品型公司提出的SQL问题

    第一部分:解决产品型公司提出的SQL问题问题 Facebook提出的平均会话时间 拥有坚实的基础和关于SQL的知识...

  • MqSQL - 调优手段

    SQL调优 SQL 调优往往是解决数据库问题的第一步,往往投入少部分精力就能获得较大的收益。SQL 调优主要目的是...

  • 【DB 精选】什么是 NoSQL?

    本文开始之前,提出几个问题:① NoSQL 是什么,能解决什么问题;② NoSQL 与 SQL 的区别;③ 目前有...

  • 业务性产品经理

    业务型产品经理主要解决定位、场景、功能、方向等相关问题,尤其是对各种用户使用场景的梳理,基于场景提出需求,这是比较...

  • Hbase介绍

    数据库类型 RDBMS:关系型数据库 MySQL NoSQL :Not only sql 解决大数据相关问题的数据...

  • 阅读各类书

    阅读实用型书 任何实用型的书都不能解决实际问题。书籍只是提出问题的解决方法,而要真正解决问题就必须行动。此外实用性...

  • PHP面试题5--SQL,事务,优化,视图

    SQL语言包括哪几个部分?每部分都有哪些操作关键字? 常见的关系型数据库产品有:Oracle, MySQL, SQ...

  • 【1210读书清单】有效沟通(5)

    001 劝说型演讲之解决问题 提出问题-提供最佳解决方案-如何应用于实践/听众可做些什么 002 劝说型演讲之证明...

  • IT企业的分类与选择

    按照企业业务模式的区别,软件公司大致可以分为外包型、项目型、产品型三类。 外包型公司,通过承接别的企业的部分或全部...

  • 公司分析框架(v0.1)

    公司分析框架(v0.1) 码字不易,转载请注明作者,谢谢 1 解决的问题-产品 公司的产品或者服务,解决了什么问题...

网友评论

      本文标题:第一部分:解决产品型公司提出的SQL问题

      本文链接:https://www.haomeiwen.com/subject/vauyartx.html