SQL相关

本文详细解析了蚂蚁森林中关于用户申领植物的统计问题,特别是如何计算在2017年10月1日后,用户累计申领'p002-沙柳'的排名及与后一名的差距。通过五个步骤,包括获取用户总减排数、胡杨和沙柳的碳价格,以及用户可领取沙柳的数量,来确定用户排名和多领数量。
摘要由CSDN通过智能技术生成

蚂蚁森林题目详解

----题目
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值