当前位置: 首页 > news >正文

做网站单线程CPU和多线程cpu推广引流哪个软件最好

做网站单线程CPU和多线程cpu,推广引流哪个软件最好,青岛高端网站开发公司,公司官网静态注:参考文章: HiveSql面试题10--sum(if)统计问题_hive sum if-CSDN博客文章浏览阅读5.8k次,点赞6次,收藏19次。0 需求分析t_order表结构字段名含义oid订单编号uid用户idotime订单时间(yyyy-MM-dd)oamount订…

注:参考文章:

HiveSql面试题10--sum(if)统计问题_hive sum if-CSDN博客文章浏览阅读5.8k次,点赞6次,收藏19次。0 需求分析t_order表结构字段名含义oid订单编号uid用户idotime订单时间(yyyy-MM-dd)oamount订单金额(元)所有在2018年1月下过单并且在2月没有下过单的用户,在3月份的下单情况:目标字段名含义_hive sum ifhttps://blog.csdn.net/godlovedaniel/article/details/108325219

0  需求分析

t_order表结构如图:

  要求:t_order表扫描次数不超过2次的前提下,统计所有在2018年1月下过单且在2月份没有下过单的用户,该用户在3月份的下单情况:

1 数据准备

CREATE TABLE t_order (oid int ,uid int ,otime string,oamount int)
ROW format delimited FIELDS TERMINATED BY ",";
load data local inpath "/opt/module/hive_data/t_order.txt" into table t_order;

2  数据分析

完整代码为:

with tmp as (selectoid,uid,otime,date_format(otime, 'yyyy-MM') as                                                  dt,oamount,---计算rk的目的是为了获取记录中的第一条row_number() over (partition by uid,date_format(otime, 'yyyy-MM') order by otime) rk,--- 计算cnt的目的是为了获取记录中的最后一条count(*) over (partition by uid,date_format(otime, 'yyyy-MM'))                    cntfrom t_orderorder by uid
)
selectuid,--每个用户一月份的订单数sum(if(dt = '2018-01', 1, 0)) as                 m1_count,--每个用户二月份的订单数sum(if(dt = '2018-02', 1, 0)) as                 m2_count,--每个用户三月份的订单数(当月订单金额超过10元的订单个数)sum(if(dt = '2018-03' and oamount > 10, 1, 0))   m3_count,--当月(3月份)首次下单的金额sum(if(dt = '2018-03' and rk = 1, oamount, 0))   m3_first_amount,--当月(3月份)末次下单的金额(rk =cnt小技巧)sum(if(dt = '2018-03' and rk = cnt, oamount, 0))  m3_last_amount
from tmp
group by uid
--将下单记录转化成下单次数判断
having m1_count >0 and m2_count=0;

 最终的输出结果为:

上述代码解析:

step1: 用date_format函数进行日期格式化,row_number() over() 获得排名rk, count(*)over()获得统计值cnt

selectoid,uid,otime,date_format(otime, 'yyyy-MM') as  dt,oamount,---计算rk的目的是为了获取记录中的第一条row_number() over (partition by uid,date_format(otime, 'yyyy-MM') order by otime) rk,--- 计算cnt的目的是为了获取记录中的最后一条count(*) over (partition by uid,date_format(otime, 'yyyy-MM'))  cntfrom t_order

step2:

  • 获取当月订单金额超过10元的订单个数 :sum(if(条件, 1, 0)) 或者 sum( case when 条件 then 1 else 0 end  );
  • 获取当月首次下单金额:rk=1
  • 获取当月末次下单金额:rk=cnt (每个分组的记录数cnt 同时也等于分组内,最后一条记录数的排序值rk)
with tmp as (selectoid,uid,otime,date_format(otime, 'yyyy-MM') as                                                  dt,oamount,---计算rk的目的是为了获取记录中的第一条row_number() over (partition by uid,date_format(otime, 'yyyy-MM') order by otime) rk,--- 计算cnt的目的是为了获取记录中的最后一条count(*) over (partition by uid,date_format(otime, 'yyyy-MM'))                    cntfrom t_orderorder by uid
)
selectuid,--每个用户一月份的订单数sum(if(dt = '2018-01', 1, 0)) as                 m1_count,--每个用户二月份的订单数sum(if(dt = '2018-02', 1, 0)) as                 m2_count,--每个用户三月份的订单数(当月订单金额超过10元的订单个数)sum(if(dt = '2018-03' and oamount > 10, 1, 0))   m3_count,--当月(3月份)首次下单的金额sum(if(dt = '2018-03' and rk = 1, oamount, 0))   m3_first_amount,--当月(3月份)末次下单的金额(rk =cnt小技巧)sum(if(dt = '2018-03' and rk = cnt, oamount, 0))  m3_last_amount
from tmp
group by uid
having m1_count >0 and m2_count=0;

3 小结

   本案例用到的知识点:

  • sum(if()) 有条件累加;
  •  row_number() over(partition by ....order by ..) 排序,求分组topN
  •  count(*) over(partition by ...) 分组统计记录数。每组的记录数同时也是最后一条记录的排序值。
  • 将下单记录转化成下单次数判断 m1_count >0 and m2_count=0;
http://www.shuangfujiaoyu.com/news/63165.html

相关文章:

  • 怎样注册个人网站校园推广的方式有哪些
  • 1000M双线网站空间大连seo外包平台
  • 关键字挖掘机爱站网深圳外贸网络推广
  • 怎样做网站服务器seo网站推广方案
  • 做网站如何选择关键词如何推广自己的产品
  • 局域网建设网站工具痘痘该如何去除效果好
  • 邢台企业做网站怎么把网站排名优化
  • 重庆模板网站多少钱南宁seo怎么做优化团队
  • 烟台网站排行榜收录网站
  • 贵州政务网站建设规范长沙官网seo分析
  • 怎么用自己电脑做网站服务器吗北京疫情最新新闻
  • 河南网站建设服务友情链接获取的途径有哪些
  • 怎么样做企业模板网站天津seo结算
  • 做网站用什么程序优化水平
  • 温州 网站建设百度打开
  • 想做一个个人网站怎么做青岛seo经理
  • 网站内部链接seo网站关键词排名软件
  • 做羊毛毡的网站软文营销实施背景
  • 怎么在ps做网站首页网站关键词优化公司
  • 西安做网站需要多少钱赣州seo培训
  • 网站的备用金怎么做凭证快速排名官网
  • 做网站起什么名字比较好重庆seo全网营销
  • 企业网站建设标准最新seo网站优化教程
  • 做网站有啥软件如何查询百度搜索关键词排名
  • 做关于灯饰的网站2023年时政热点事件
  • 2017年网站设计seo网站关键词优化
  • 青岛 机械 中企动力提供网站建设自己做网站难吗
  • html5做网站总结百度云网页版登录入口
  • 怎么用建站系统建网站百度广告投放价格表
  • 网站卡的原因seo外链工具有用吗