蚂蚁森林题目详解
----题目
1.蚂蚁森林植物申领统计
问题:假设2017年1月1日开始记录低碳数据(user_low_carbon),假设2017年10月1日之前满足申领条件的用户都申领了一颗p004-胡杨,
剩余的能量全部用来领取“p002-沙柳” 。
统计在10月1日累计申领“p002-沙柳” 排名前10的用户信息;以及他比后一名多领了几颗沙柳。
得到的统计结果如下表样式:
user_id plant_count less_count(比后一名多领了几颗沙柳)
u_101 1000 100
u_088 900 400
u_103 500 …
解答;
前提1:在2007年10月1日
前提2:都领一颗 p004
前提3:剩余的都领取 p002
- 第一步:获取指定时间范围内用户的总减排数
from user_low_carbon
select user_id,sum(low_carbon) sum_low_carbon, regexp_replace(data_dt,'/','-') data_dt
where regexp_replace(data_dt,'/','-')<'2017-10-01'
group by user_id,data_dt
- 第二步:获取胡杨的碳价格
select low_carbon hu from plant_carbon where plant_id='p004'
- 第三步:获取沙柳的价格
select low_carbon sa from plant_carbon where plant_id='p002'
- 第四步:查询用户可以领取的沙柳数
from (
from user_low_carbon
select user_id,sum(low_carbon) sum_low_carbon
where regexp_replace(data_dt,'/','-')<'2017-10-01'
group by user_id
) t1,(
select low_carbon hu from plant_carbon where plant_id='p004'
) t2,(
select low_carbon sa from plant_carbon where plant_id='p002'
) t3
select t1.user_id, floor((t1.sum_low_carbon-t2.hu)/t3.sa) total
order by total desc
- 第五步:计算当前名次用户比其后一名用户多领的数量
from (
from (
from user_low_carbon
select user_id,sum(low_carbon) sum_low_carbon
where regexp_replace(data_dt,'/','-')<'2017-10-01'
group by user_id
) t1,(
select low_carbon hu from plant_carbon where plant_id='p004'
) t2,(
select low_carbon sa from plant_carbon where plant_id='p002'
) t3
select t1.user_id, floor((t1.sum_low_carbon-t2.hu)/t3.sa) total
order by total desc
)t4
select t4.user_id,t4.total, t4.total-lead(t4.total,1,0)over(order by t4.total desc)
limit 10