2026年字节跳动数据分析岗SQL笔试与业务场景面试_第1页
2026年字节跳动数据分析岗SQL笔试与业务场景面试_第2页
2026年字节跳动数据分析岗SQL笔试与业务场景面试_第3页
2026年字节跳动数据分析岗SQL笔试与业务场景面试_第4页
2026年字节跳动数据分析岗SQL笔试与业务场景面试_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年字节跳动数据分析岗SQL笔试与业务场景面试一、SQL笔试部分(共10题,每题10分,总分100分)1.基础SQL查询题(2题)题目1(5分):假设存在一个用户表`users`,包含字段`user_id`(用户ID)、`name`(用户名)、`register_date`(注册日期)、`last_login_date`(最后登录日期)。请写SQL查询语句,统计每个用户的注册时长(天数),并只显示注册时长超过30天的用户,结果按注册时长降序排列。答案与解析:sqlSELECTuser_id,name,DATEDIFF(day,register_date,last_login_date)ASregister_durationFROMusersWHEREDATEDIFF(day,register_date,last_login_date)>30ORDERBYregister_durationDESC;解析:-`DATEDIFF(day,register_date,last_login_date)`计算注册日期和最后登录日期之间的天数差,即注册时长。-`WHERE`子句筛选出注册时长超过30天的用户。-`ORDERBY`子句按注册时长降序排列,符合数据分析中对时间趋势的考察。题目2(5分):假设存在一个订单表`orders`,包含字段`order_id`(订单ID)、`user_id`(用户ID)、`order_date`(订单日期)、`status`(订单状态,如'已支付'、'已取消')。请写SQL查询语句,统计每个用户的订单支付金额,并只显示支付金额超过1000元的用户,结果按支付金额降序排列。答案与解析:sqlSELECTuser_id,SUM(amount)AStotal_paid_amountFROMordersWHEREstatus='已支付'GROUPBYuser_idHAVINGSUM(amount)>1000ORDERBYtotal_paid_amountDESC;解析:-`SUM(amount)`计算每个用户的订单支付总金额。-`WHERE`子句筛选出状态为“已支付”的订单。-`GROUPBY`子句按用户ID分组。-`HAVING`子句筛选出支付金额超过1000元的用户。-`ORDERBY`子句按支付金额降序排列。2.子查询与连接查询题(2题)题目3(10分):假设存在一个商品表`products`,包含字段`product_id`(商品ID)、`category`(商品类别)、`price`(价格)。请写SQL查询语句,找出每个类别中价格最高的商品,结果包含商品ID、类别和价格。答案与解析:sqlSELECTduct_id,p1.category,p1.priceFROMproductsp1WHEREp1.price=(SELECTMAX(p2.price)FROMproductsp2WHEREp1.category=p2.category);解析:-外层查询选择商品ID、类别和价格。-子查询`SELECTMAX(p2.price)FROMproductsp2WHEREp1.category=p2.category`找出每个类别中的最高价格。-外层查询的条件是商品价格等于子查询返回的最高价格,从而筛选出每个类别中的最高价商品。题目4(10分):假设存在一个用户表`users`和一个订单表`orders`,`users`表包含`user_id`(用户ID)、`name`(用户名),`orders`表包含`order_id`(订单ID)、`user_id`(用户ID)、`order_date`(订单日期)、`status`(订单状态)。请写SQL查询语句,找出所有“已支付”订单的用户名,且这些用户在过去一年内至少有3个“已支付”订单,结果按用户名排序。答案与解析:sqlSELECTFROMusersuJOINordersoONu.user_id=o.user_idWHEREo.status='已支付'ANDo.order_date>=DATE_SUB(CURDATE(),INTERVAL1YEAR)GROUPBYHAVINGCOUNT(o.order_id)>=3ORDERBY;解析:-`JOIN`连接`users`和`orders`表,通过`user_id`关联用户和订单。-`WHERE`子句筛选出“已支付”订单且订单日期在过去一年内。-`GROUPBY`子句按用户名分组。-`HAVING`子句筛选出在过去一年内有至少3个“已支付”订单的用户。-`ORDERBY`子句按用户名排序。3.窗口函数与聚合查询题(2题)题目5(10分):假设存在一个销售表`sales`,包含字段`sale_id`(销售ID)、`product_id`(商品ID)、`amount`(销售额)、`sale_date`(销售日期)。请写SQL查询语句,统计每个商品近7天的日销售额,并显示每个商品的总销售额,结果按商品ID排序。答案与解析:sqlSELECTproduct_id,sale_date,SUM(amount)OVER(PARTITIONBYproduct_idORDERBYsale_dateRANGEBETWEENINTERVAL7DAYPRECEDINGANDCURRENTROW)ASdaily_sales,SUM(amount)OVER(PARTITIONBYproduct_id)AStotal_salesFROMsalesORDERBYproduct_id,sale_date;解析:-`SUM(amount)OVER(PARTITIONBYproduct_idORDERBYsale_dateRANGEBETWEENINTERVAL7DAYPRECEDINGANDCURRENTROW)`使用窗口函数计算每个商品近7天的日销售额。-`SUM(amount)OVER(PARTITIONBYproduct_id)`计算每个商品的总销售额。-`ORDERBY`子句按商品ID和销售日期排序,便于分析时间趋势。题目6(10分):假设存在一个用户表`users`和一个活跃度表`activity`,`users`表包含`user_id`(用户ID)、`register_date`(注册日期),`activity`表包含`user_id`(用户ID)、`action_date`(行为日期)、`action_type`(行为类型,如'登录'、'发布')。请写SQL查询语句,统计每个用户的“登录”行为数量,并找出每个用户最近30天内的活跃度得分(活跃度得分=“登录”行为数量2+“发布”行为数量),结果按用户ID排序。答案与解析:sqlSELECTu.user_id,COUNT(CASEWHENa.action_type='登录'THEN1END)ASlogin_count,(COUNT(CASEWHENa.action_type='登录'THEN1END)2+COUNT(a.action_type))ASactivity_scoreFROMusersuLEFTJOINactivityaONu.user_id=a.user_idWHEREa.action_date>=DATE_SUB(CURDATE(),INTERVAL30DAY)GROUPBYu.user_idORDERBYu.user_id;解析:-`COUNT(CASEWHENa.action_type='登录'THEN1END)`统计每个用户的“登录”行为数量。-活跃度得分计算公式为“登录”行为数量2+“发布”行为数量。-`LEFTJOIN`确保即使用户没有行为数据也能被包含(但活跃度得分为0)。-`WHERE`子句筛选出最近30天的行为数据。-`GROUPBY`子句按用户ID分组。-`ORDERBY`子句按用户ID排序。4.复杂SQL与业务场景题(4题)题目7(10分):假设存在一个用户表`users`和一个订单表`orders`,`users`表包含`user_id`(用户ID)、`city`(城市)、`register_date`(注册日期),`orders`表包含`order_id`(订单ID)、`user_id`(用户ID)、`order_date`(订单日期)、`status`(订单状态)、`amount`(金额)。请写SQL查询语句,统计每个城市的“已支付”订单的平均金额,并只显示平均金额超过500元的城市,结果按平均金额降序排列。答案与解析:sqlSELECTu.city,AVG(o.amount)ASavg_amountFROMusersuJOINordersoONu.user_id=o.user_idWHEREo.status='已支付'GROUPBYu.cityHAVINGAVG(o.amount)>500ORDERBYavg_amountDESC;解析:-`JOIN`连接`users`和`orders`表,通过`user_id`关联用户和订单。-`WHERE`子句筛选出“已支付”订单。-`GROUPBY`子句按城市分组。-`AVG(o.amount)`计算每个城市的“已支付”订单平均金额。-`HAVING`子句筛选出平均金额超过500元的城市。-`ORDERBY`子句按平均金额降序排列。题目8(10分):假设存在一个商品表`products`和一个销售表`sales`,`products`表包含`product_id`(商品ID)、`category`(商品类别)、`price`(价格),`sales`表包含`sale_id`(销售ID)、`product_id`(商品ID)、`amount`(销售额)、`sale_date`(销售日期)。请写SQL查询语句,找出每个类别中销售额最高的商品,并显示商品ID、类别、价格和销售额,结果按类别和销售额降序排列。答案与解析:sqlSELECTduct_id,p.category,p.price,SUM(s.amount)AStotal_salesFROMproductspJOINsalessONduct_id=duct_idGROUPBYduct_id,p.category,p.priceORDERBYp.category,total_salesDESC;解析:-`JOIN`连接`products`和`sales`表,通过`product_id`关联商品和销售数据。-`GROUPBY`子句按商品ID、类别和价格分组,确保每个商品的统计独立。-`SUM(s.amount)`计算每个商品的销售额。-`ORDERBY`子句先按类别排序,再按销售额降序排列,便于分析类别内的销售排名。题目9(10分):假设存在一个用户表`users`和一个订单表`orders`,`users`表包含`user_id`(用户ID)、`city`(城市)、`register_date`(注册日期),`orders`表包含`order_id`(订单ID)、`user_id`(用户ID)、`order_date`(订单日期)、`status`(订单状态)、`amount`(金额)。请写SQL查询语句,统计每个城市的“已支付”订单数量,并找出每个城市中“已支付”订单金额最高的用户,结果包含城市、订单数量和最高金额用户的用户名。答案与解析:sqlWITHpaid_ordersAS(SELECTo.user_id,o.city,o.amountFROMordersoWHEREo.status='已支付'),city_order_countsAS(SELECTcity,COUNT()ASorder_countFROMpaid_ordersGROUPBYcity),max_ordersAS(SELECTpo.city,po.user_id,po.amountFROMpaid_orderspoWHEREpo.amount=(SELECTMAX(amount)FROMpaid_ordersWHEREcity=po.city)),user_namesAS(SELECTu.user_id,FROMusersu)SELECTcoc.city,coc.order_count,AStop_user_name,mo.amountFROMcity_order_countscocJOINmax_ordersmoONcoc.city=mo.cityJOINuser_namesunONmo.user_id=un.user_id;解析:-`paid_orders`子查询筛选出“已支付”订单。-`city_order_counts`子查询统计每个城市的“已支付”订单数量。-`max_orders`子查询找出每个城市中“已支付”订单金额最高的用户。-`user_names`子查询关联用户表,获取用户名。-最终查询通过`JOIN`连接各子查询,输出城市、订单数量和最高金额用户的用户名及金额。题目10(10分):假设存在一个用户表`users`和一个广告点击表`ads_clicks`,`users`表包含`user_id`(用户ID)、`city`(城市)、`register_date`(注册日期),`ads_clicks`表包含`click_id`(点击ID)、`user_id`(用户ID)、`click_date`(点击日期)、`ad_type`(广告类型)。请写SQL查询语句,统计每个城市的“视频广告”点击数量,并找出每个城市中“视频广告”点击数量最多的用户,结果包含城市、点击数量和最高点击用户的用户名。答案与解析:sqlWITHvideo_clicksAS(SELECTac.user_id,ac.city,COUNT()ASclick_countFROMads_clicksacWHEREac.ad_type='视频广告'GROUPBYac.user_id,ac.city),max_clicksAS(SELECTvc.city,vc.user_id,vc.click_countFROMvideo_clicksvcWHEREvc.click_count=(SELECTMAX(click_count)FROMvideo_clicksWHEREcity=vc.city)),user_namesAS(SELECTu.user_id,FROMusersu)SELECTmc.city,mc.click_count,AStop_user_nameFROMmax_clicksmcJOINuser_namesunONmc.user_id=un.user_id;解析:-`video_clicks`子查询统计每个城市“视频广告”的点击数量。-`max_clicks`子查询找出每个城市中“视频广告”点击数量最多的用户。-`user_names`子查询关联用户表,获取用户名。-最终查询通过`JOIN`连接各子查询,输出城市、点击数量和最高点击用户的用户名。二、业务场景面试部分(共5题,每题20分,总分100分)1.用户行为分析题(20分)题目:假设你正在负责字节跳动短视频平台的用户行为分析,现有数据包含用户观看时长、点赞、评论、分享等行为。请写SQL查询语句,统计每个用户的互动率(互动率=(点赞数+评论数+分享数)/观看时长),并找出互动率最高的前10名用户,结果包含用户ID、互动率。假设互动数据存储在`user_interactions`表中,包含字段`user_id`(用户ID)、`watch_time`(观看时长,单位:分钟)、`likes`(点赞数)、`comments`(评论数)、`shares`(分享数)。答案与解析:sqlSELECTuser_id,(likes+comments+shares)/watch_timeASinteraction_rateFROMuser_interactionsORDERBYinteraction_rateDESCLIMIT10;解析:-`likes+comments+shares`计算用户的总互动数。-`interaction_rate`计算互动率,反映用户在观看时长内的互动积极性。-`ORDERBYinteraction_rateDESC`按互动率降序排列。-`LIMIT10`筛选出互动率最高的前10名用户。业务价值:该分析有助于识别高互动用户,为平台推荐策略提供参考,优化内容分发,提升用户粘性。2.销售数据分析题(20分)题目:假设你正在负责电商平台的销售数据分析,现有数据包含订单信息、用户信息、商品信息。请写SQL查询语句,统计每个用户的购买频次(购买频次=订单数量),并找出购买频次最高的前10名用户,结果包含用户ID、购买频次。假设订单数据存储在`orders`表中,包含字段`order_id`(订单ID)、`user_id`(用户ID)、`order_date`(订单日期),用户数据存储在`users`表中,包含字段`user_id`(用户ID)、`name`(用户名)。答案与解析:sqlSELECTu.user_id,,COUNT(o.order_id)ASpurchase_frequencyFROMusersuJOINordersoONu.user_id=o.user_idGROUPBYu.user_id,ORDERBYpurchase_frequencyDESCLIMIT10;解析:-`JOIN`连接`users`和`orders`表,通过`user_id`关联用户和订单。-`GROUPBY`子句按用户ID和用户名分组。-`COUNT(o.order_id)`统计每个用户的订单数量,即购买频次。-`ORDERBYpurchase_frequencyDESC`按购买频次降序排列。-`LIMIT10`筛选出购买频次最高的前10名用户。业务价值:该分析有助于识别高忠诚度用户,为用户分层和精准营销提供数据支持,提升复购率。3.广告效果分析题(20分)题目:假设你正在负责字节跳动广告效果分析,现有数据包含广告点击数据、用户信息、广告信息。请写SQL查询语句,统计每个广告的点击转化率(点击转化率=转化数/点击数),并找出点击转化率最高的前10名广告,结果包含广告ID、广告名称、点击转化率。假设广告点击数据存储在`ads_clicks`表中,包含字段`click_id`(点击ID)、`ad_id`(广告ID)、`user_id`(用户ID)、`click_date`(点击日期)、`conversion`(是否转化,1表示转化,0表示未转化),广告信息存储在`ads`表中,包含字段`ad_id`(广告ID)、`ad_name`(广告名称)。答案与解析:sqlSELECTa.ad_id,a.ad_name,SUM(CASEWHENac.conversion=1THEN1ELSE0END)1.0/COUNT(ac.click_id)ASconversion_rateFROMads_clicksacJOINadsaONac.ad_id=a.ad_idGROUPBYa.ad_id,a.ad_nameORDERBYconversion_rateDESCLIMIT10;解析:-`SUM(CASEWHENac.conversion=1THEN1ELSE0END)`统计每个广告的转化数。-`COUNT(ac.click_id)`统计每个广告的点击数。-`conversion_rate`计算点击转化率。-`ORDERBYconversion_rateDESC`按点击转化率降序排列。-`LIMIT10`筛选出点击转化率最高的前10名广告。业务价值:该分析有助于识别高效果广告,为广告投放策略提供参考,优化广告资源分配,提升ROI。4.用户留存分析题(20分)题目:假设你正在负责字节跳动平台的用户留存分析,现有数据包含用户注册数据和活跃数据。请写SQL查询语句,统计每个用户的次日留存率(次日留存率=次日活跃用户数/注册用户数),并找出次日留存率最高的前10名用户,结果包含用户ID、次日留存率。假设用户注册数据存储在`users`表中,包含字段`user_id`(用户ID)、`register_date`(注册日期),用户活跃数据存储在`user_activity`表中,包含字段`user_id`(用户ID)、`activity_date`(活跃日期)。答案与解析:sqlWITHdaily_usersAS(SELECTregister_date,COUNT()ASregister_countFROMusersGROUPBYregister_date),active_usersAS(SELECTactivity_date,user_idFROMuser_activityWHEREactivity_date=DATE_ADD(register_date,INTERVAL1DAY)ANDregister_dateIN(SELECTregister_dateFROMdaily_users)),retention_ratesAS(SELECTdu.register_date,SUM(CASEWHENau.user_idISNOTNULLTHEN1ELSE0END)1.0/du.register_countASretention_rateFROMdaily_usersduLEFTJOINactive_usersauONdu.register_date=au.register_dateGR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论