快手电商数据分析凉经

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

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 上海

相关推荐

点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

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