【SQL】网易2018实习生招聘笔试题-数据分析实习生

考拉运营"小明"负责多个品牌的销售业绩,请完成:

(1)请统计小明负责的各个品牌,在2017年销售最高的3天,及对应的销售额。

销售表 a:

字段:logday(日期,主键组),SKU_ID(商品SKU,主键组),sale_amt(销售额)

商品基础信息表 b:

字段:SKU_ID(商品SKU,主键),bu_name(商品类目),brand_name(品牌名称),user_name(运营负责人名称)

(2)请统计小明负责的各个品牌,在2017年连续3天增长超过50%的日期,及对应的销售额。

(1)第一题比较常规

select t.brand_name,t.a.sale_amt,a.logday from

(select *,row_number(partition by b.brand_name order by sale_amt desc) rn from

    a join b on a.SKU_ID=b.SKU_ID

    where year(logday)=2017 and user_name='小明')

where t.rn=1

(2)第二题有点复杂,这里会用到一个窗口函数lead()

作用:Lag和Lead分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag)和后N行的数据(Lead)作为独立的列。

语法:

lag(exp_str,offset,defval) over(partion by ..order by …)

lead(exp_str,offset,defval) over(partion by ..order by …)

其中exp_str是字段名

     Offset是偏移量,即是上1个或上N个的值,假设当前行在表中排在第5行,则offset 为3,则表示我们所要找的数据行就是表中的第2行(即5-3=2)。

     Defval默认值,当两个函数取上N/下N个值,当在表中从当前行位置向前数N行已经超出了表的范围时,lag()函数将defval这个参数值作为函数的返回值,若没有指定默认值,则返回NULL,那么在数学运算中,总要给一个默认值才不会出错。

参考:https://blog.csdn.net/pelifymeng2/article/details/70313943

这里为了方便,先创建一个两表连接后的视图,命名为品牌日销售额brand_day_sale

select 

(select brand_name,

    logday,

    sale,

    lead(sale,1) over(partition by brand_name order by logday)as sale1,

    lead(sale,2) over(parition by brand_name order by logday) as sale2,

    lead(sale,3) over(partition by brand_name order by logday) as sale3

from brand_day_sale

order by brand_name,logday)t1

    where sale1/sale>1.5 

    and sale2/sale1>1.5

    and sale3/sale2>1.5

参考:https://www.nowcoder.com/test/question/done?tid=33332511&qid=168632#summary

你可能感兴趣的:(【SQL】网易2018实习生招聘笔试题-数据分析实习生)