快手电商数据分析凉经

自己表达太差了所以一面挂吧。。。
问用户流失相关的问题,比如说应该给哪些人发放优惠券来确保他们不流失,怎么确保这类人不流失

SQL:
一个用户直播打赏表 user_author_live_amt,记录每天用户给每个主播打赏的金额,包含字段(p_date, user_id, author_id, total_cost_amt),分别为:格式为yyyymmdd的日期,打赏用户ID,被打赏主播ID,打赏金额)

问题:查询累计打赏超过10万元的用户中,每个用户打赏总金额排名前3的主播ID和其被打赏总金额

我的答案是:
with total as(
select
user_id,
sum(total_cost_amt) as total_sum
from user_author_live_amt
group by user_id
having total_sum > 1000000),
author as (
    select 
    user_id,
    author_id,
    sum(total_cost_amt) as author_total
    from user_author_live_amt
    group by user_id,author_id
)
select user_id,
author_id, author_total
from (
    select 
    a.user_id,a.author_id,a.author_total
    row_number()over(partition by a.user_id order by a.author_total desc) ranking
    from author a 
    join total t on a.user_id = t.user_id
)s
where ranking <= 3;
全部评论
纯讨论一下sql是不是写的有点问题,total表having 用新命名字段筛不出来,第一张表找出用户之后直接join WITH t0 AS ( SELECT user_id FROM user_author_live_amt GROUP BY user_id HAVING SUM(total_cost_amt) > 100000 ), t1 AS ( SELECT a.user_id, a.author_id, SUM(a.total_cost_amt) AS total_reward, ROW_NUMBER() OVER ( PARTITION BY a.user_id ORDER BY SUM(a.total_cost_amt) DESC) AS ranking FROM user_author_live_amt a JOIN t0 b ON a.user_id = b.user_id GROUP BY 1, 2 ) SELECT user_id, author_id, total_reward FROM user_author_ranking WHERE ranking <= 3 ORDER BY user_id, ranking;
点赞 回复 分享
发布于 07-19 22:01 上海

相关推荐

07-16 18:03
门头沟学院 Java
点赞 评论 收藏
分享
09-05 12:26
仰恩大学 营销
秋招第二次就面到字节了52分钟,非常非常压力面,面试官不断打断我、否定我,认为我做的东西太简单,觉得我没学到东西感觉太压抑了后面都有点扛不住了
ALEX_BLX:压力面我一般直接反过来怼面试官你有本事压力你ld去,压力一个应届生算什么东西?服从性测试罢了,你敢压力我我就敢怼你,然后直接投诉hr
一起聊字节
点赞 评论 收藏
分享
评论
点赞
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务