官方题解 | #小破站会员2021年9月收入#

小破站会员2021年9月收入

http://www.nowcoder.com/practice/9072394169054c278518b1872cb72213

step1: 统计9月期间是会员的所有用户的均摊收入;

step2: 9月期间是会员的所有用户中,若大会员生效开始日期小于9月1号将start_date设置为9月1号,否则,start_date等于begin_date。若大会员生效结束日期大于9月30号将stop_date设置为9月30号,否则,stop_date等于end_date。(目的在于统计的是9月份b站会员的收入);

step3:stop_date减start_date即为每个大会员9月份会员生效的天数,乘以均摊收入即为每个用户9月份收入,对所有用户收入求和,即为9月b站会员费的收入。

SELECT round(sum((DATEDIFF(stop_date, start_date)+1)*avg_revenue), 2) as revenue

FROM(

SELECT *,

IF(begin_date<='2021-9,1', date('2021-9,1'), begin_date) as start_date,

IF(end_date>='2021-9-30',date('2021-9-30'), end_date) as stop_date,

pay_amount / days as avg_revenue

FROM detail_list_tb

WHERE (begin_date<'2021-9-1' and end_date>'2021-9-1')

OR begin_date BETWEEN '2021-9-1' AND '2021-9-30'

)t;

全部评论
select round(sum(pay_amount*(datediff(end_date,begin_date)+1)/days),2) from (select user_id,days,pay_amount, case when begin_date < '2021-09-01' then '2021-09-01' else begin_date end begin_date, case when end_date > '2021-09-30' then '2021-09-30' else end_date end end_date from detail_list_tb where month(begin_date) = 9 or month(end_date) = 9 or (month(begin_date) < 9 and month(end_date) > 9))s
点赞 回复 分享
发布于 2021-10-20 10:12
你这个是有问题的,你没有考虑开始日期不在9月结束日期在9月的情况,正好测试数据里面没有这样的数据。
点赞 回复 分享
发布于 2021-10-20 10:11

相关推荐

码农索隆:想看offer细节
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

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