文章目录

  • 1. 淘宝
    • 题目一
    • 题目二(重点:漏斗转化率)
    • 题目三(重点:复购率)
  • 2. 腾讯
    • 题目一(重点:留存率)
  • 3. 字节
    • 题目一
    • 题目二
  • 小结

注:时间内有限,可能有不少瑕疵,目前只看思路

1. 淘宝

题目一

  • 表格描述:现有一张用户APP访问日志表(view_log),字段结构如下:

    • user_id,用户注册时生成的ID

    • page_name,页面名称

    • viewtime,访问时间

    • page_view_duration, 访问时长

  • 问题描述:统计用户最后访问的页面信息,提取每日最后停留次数最多TOP10页面

  • 解答

    SELECT DISTINCT n.page_name
    FROM (SELECT m.*, COUNT(page_name) OVER(PARTITION BY page_time ORDER BY viewtime DESC) cntFROM (SELECT *,RANK() OVER(PARTITION BY user_id ORDER BY page_time DESC) rkFROM view_log) m WHERE m.rk = 1) n  # 用户最后访问的页面信息
    WHERE n.cnt <= 10
    

题目二(重点:漏斗转化率)

  • 表格描述:现有一张用户APP访问日志表(view_log),表结构请参考面试真题1。
  • 题目描述:用户下单需要经历以下几个步骤,打开APP-》商品详情页-》订单填写页-》支付成功页。请统计每天该漏斗的转换情况。
  • 题目解答:
SELECT l2/l1, l3/l2, l4/l3
FROM
(
SELECT SUM(IF(page_name = 'l1'), 1, 0) l1,SUM(IF(page_name = 'l2'), 1, 0) l2,SUM(IF(page_name = 'l3'), 1, 0) l3,SUM(IF(page_name = 'l4'), 1, 0) l4
FROM view_log
GROUP BY page_time
) m

题目三(重点:复购率)

  • 表格描述
    表说明:现有一张订单支付表(order_info),字段结构如下:

    • user_id,用户注册时生成的ID

    • orderid, 订单ID

    • goodsid,商品ID

    • paystatus,支付状态,退款,未支付,已支付

    • paytime,支付时间

    • order_amount,支付金额

    • goods_num, 购买的商品件数

    注意:一个订单可能包含多个商品ID,该表的主键为:orderid+goodsid

  • 题目描述
    用户下单后,第二次购买的时间间隔成为复购时间,请计算每日下单的用户平均复购时长?注意复购时长大于30天将直接记为流失用户,不参与复购时长计算,购买订单不包含未支付订单。

  • 解答:
    一时没写出来

    SELECT AVG()
    FROM
    (
    SELECT *, RANK() OVER(PARTITION BY user_id ORDER BY paytime ASC) rk_paytime
    order_info
    ) m
    WHERE m.rk_paytime <= 2
    ...
    ...
    

    这题需要用到 自连接,然后用 DATEDIFF()选取两个值求差,并计算平均值。

2. 腾讯

题目一(重点:留存率)

  • 表格描述
    现有一张用户活跃表(user_acttive)

    字段结构如下:

      date:日期user_id:用户IDdevice:设备类型active_score:活跃度
    
  • 题目描述
    问题①:请计算每日的用户次留存率
    问题②:根据不同设备,按照用户活跃度进行排名,并输出每个设备活跃度TOP100的用户ID及活跃日期、活跃度。

  • 题解
    (1)求次日留存率

    SELECT a.date, SUM(IF(b.user_id IS NOT NULL, 1, 0)) / COUNT(*) AS rate
    FROM user_active a
    LEFT JOIN user_active b
    ON a.user_id = b.suer_idAND DATE_ADD(a.date, 1) = b.date
    WHERE a.date != CURRENT_DATE # 最新一天的数据不参与计算
    GROUP BY a.date;
    

    小结:①使用表自连接 加上日期+1 关联匹配第次日信息,②并且当日数据不参与留存计算

    与”复购率“的求解本质很类似,但是概念不同,注意区分。
    (2)

    SELECT m.user_id, m.date, m.active_score
    FROM
    (
    SELECT *, RANK() OVER(PARTITION BY device ORDER BY active_score DESC) rk
    ) m
    WHERE m.rk <= 100
    GROUP BY m.device
    ORDER BY m.active_score
    

3. 字节

题目一

  • 题目描述
    抖音电商平台,现有一张订单表(order_info),有以下字段:

      order_idgoods_idorder_amt
    

    请统计销量金额前10的商品信息。

  • 题解
    错误解法:(忽略了可能存在重复 goods_id 的情况,分组对象也错误)

    SELECT m.order_iid, m.goods_id, m.order_amt
    FROM
    (
    SELECT *,RANK() OVER(PARTITION BY orderid ORDER BY order_amt DESC) rk
    ) m
    WHERE m.rk <= 10;
    

    正解:

    SELECT n.order_id, n.goods_id, n.order_amt
    FROM (SELECT m.*, RANK() OVER(PARTITION BY m.goods_id ORDER BY m.total_amt) rkFROM (SELECT order_id, goods_id, order_amt, SUM(order_amt) total_amt)FROM order_info GROUP BY goods_id) m     ) n
    WHERE n.rk <= 10;
    

    这题结合考察了窗口函数聚合函数

题目二

  • 题目描述
    现有一张用户登录表(user_login_log),请统计2021.9.1之前活跃过,但是9.1之后再也没有登录的用户。表结构如下:

      uiddt
    
  • 题解

SELECT DISTINCT uid
FROM user_login_log
WHERE dt < '2021-09-01' AND uid NOT IN (SELECT uid FROM user_login_log WHERE dt > '2021-09-01')

另解:通过限制date的边界值均在目标日期之内

小结

大厂主要考察的的点主要是以下四点:

  • JOIN
  • 聚合函数
  • 窗口函数
  • 列转换

钱三点已经各自单独总结,第四点暂时不管:

主要参考:

  1. 【数据分析岗】淘宝面试真题
  2. 【数据分析岗】腾讯面试真题
  3. 【数据分析岗】字节面试真题

数据分析-面试(SQL真题)相关推荐

  1. 北京大学MEM提前面试历年真题-文都管联院

    **北京大学MEM提前面试历年真题**

  2. 小学语文教师资格面试试讲真题及答案_咏柳播报文章

    小学语文教师资格面试试讲真题及答案_咏柳播报文章 1.题目:<咏柳> 2.内容: 3.基本要求: (1)带领学生品味比喻的修辞手法; (2)示范朗读诗歌; (3)合理的板书设计. 参考解析 ...

  3. 2019年京东Java研发岗社招面经(面试经历+真题总结+经验分享)!

    本篇先以日历形式回顾秋招之路,方便各位参考某厂的处理进度:然后是总结归纳春秋招Java面试题库:最后做个总结还有展望,开始新的征程~ 面试经历 京东面试真题 面试经验分享 1.面试经历 2018年的冬 ...

  4. android activity启动流程_1307页!一线大厂Android面试全套真题解析!

    /   前言   / 金九银十到了,很多读者都反映有面试的需求,所以我特地给大家准备了一点资料! 下面的题目都是大家在面试一线互联网大厂时经常遇到的面试真题和答案解析,如果大家还有其他好的题目或者好的 ...

  5. 华东师范大学提前面试历年真题领取

    23届小伙伴们我来了,最近给大家更新了很多22考研复试的资料,国家线,34所自划线等等,大家对于22考研应该都有了比较深入的认识. 考研这件事,就是你有这个想法了, 就再也放不下. 唯有努力拼一把,也 ...

  6. 教资面试计算机硬件真题,初中信息技术教资面试真题:保存图文-复制并保存文字...

    初中信息技术教师资格面试的题型和其他学科有些许区别,对专业知识的把控比较严格.学霸君准备了初中信息技术教师资格面试真题:图层的应用(二)-制作扇形面,希望考生在学习中成长.进步. 此题目为2019下半 ...

  7. 新鲜出炉:Tencent安卓开发工程师岗位【笔试+面试】真题,带解析

    如今,国内移动互联网的红利期已经过去,Android 开发工程师也从最初的一人难求,到现在的一个岗位百人竞争.僧多粥少的情况直接导致Android开发岗位的竞争力越来越高,因此,在求职前的充分准备就变 ...

  8. 数值分析类智力题(IT产品类笔面试题型真题分析)

    导读: 1.老鼠与毒药问题 2.海盗分金问题 3.坏硬币问题/称球问题 4.跳棋问题        5.疯狗/帽子问题        6.三个宝盒的概率问题        7.分金条问题        ...

  9. 1307页阿里Android面试全套真题解析在互联网火了,Android程序员怎么优雅迈过30K+这道坎

    前言 Android常用知识体系是什么鬼?所谓常用知识体系,就是指对项目中重复使用率较高的功能点进行梳理.注意哦,不是Android知识体系. 古语道:学而不思则罔,思而不学则殆.如果将做项目类比为& ...

最新文章

  1. Concurrency Runtime in Visual C++ 2010
  2. 各种 Optimizer 梯度下降优化算法总结
  3. 华人团队用Transformer做风格迁移,速度快、可试玩,网友却不买账
  4. 用Delphi进行word开发
  5. java sentence_Java Sentence類代碼示例
  6. deserializer does not exist: org.openx.data.jsonserde.JsonSerDe
  7. JavaScript:对象转换为字符串、字符串转换为对象
  8. SQL Server 获取日期是星期周几(默认从周日开始到周六 1-7)
  9. nit计算机应用基础考试系统,NIT考试计算机应用基础试题
  10. SpringBoot2.X 单元测试(Junit4.X) 基本配置
  11. 读书笔记|《金字塔原理》第二章
  12. java生成随机数方法
  13. ASP.NET AES加密
  14. ClickHouse 来自战斗民族的OLAP利器
  15. 网络篇 思科设备的登陆方式07
  16. hubot+slack(hubot部分)
  17. UG/NX二次开发 选择坐标系控件 UF_UI_specify_csys
  18. Ubuntu 20.04 ROS noetic 问题解决
  19. 机器学习 | 调参 Part1
  20. js正则:提取css语法中的背景图片名字

热门文章

  1. 【MySQL】 ---- 共享锁、独占锁、行锁、表锁
  2. 如何用 canvas 画出分形图
  3. 计算机基本单位——位、字节、字、字长
  4. PyTorch实现基于卷积神经网络的面部表情识别
  5. IEduChina2019国际教育展在北京完美落幕
  6. 破解中国汽车未来,BAT及车企各巨头汇聚世界智能网联汽车大会
  7. js密码生成器小工具
  8. win10睡眠按啥键唤醒_win10关闭屏幕后无法唤醒怎么办?电脑黑屏只能重启的解决方法...
  9. 2022保研夏令营经验贴(中科大、华科、武大、国防科大、浙大软件、中科院)
  10. 代码库_单精度浮点减法器