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

网站平面设计完成后 与客户怎样沟通化妆品营销型网站模板

网站平面设计完成后 与客户怎样沟通,化妆品营销型网站模板,自适应网站建设服务哪家好,输入搜索内容注:参考文章: SQL条件判断语句嵌套window子句的应用【易错点】--HiveSql面试题25_sql剁成嵌套判断-CSDN博客文章浏览阅读920次,点赞4次,收藏4次。0 需求分析需求:表如下user_idgood_namegoods_typerk1hadoop1011hive1…

注:参考文章:

SQL条件判断语句嵌套window子句的应用【易错点】--HiveSql面试题25_sql剁成嵌套判断-CSDN博客文章浏览阅读920次,点赞4次,收藏4次。0 需求分析需求:表如下user_idgood_namegoods_typerk1hadoop1011hive1221sqoop2631hbase1041spark1351flink2661kafka1471oozie108以上数据._sql剁成嵌套判断https://blog.csdn.net/godlovedaniel/article/details/118220935

0 需求

   基于下表的表结构及数据,求出每个用户每次搜索非广告类型的商品位置排序。假设字段goods_type为26代表该商品类型是广告。

想达到的效果:

1 数据加载

--建表
create table window_goods_test (
user_id int,    --用户id
goods_name string,  --商品名称
goods_type int, --标识每个商品的类型,比如广告,非广告
rk int  --这次搜索下商品的位置,比如第一个广告商品就是1,后面的依次2,3,4...
)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';-- 加载数据
load data local  inpath '/opt/module/hive_data/window_goods_test.txt' into table window_goods_test ;

 vim window_goods_test.txt

1    hadoop    10    1
1    hive    12    2
1    sqoop    26    3
1    hbase    10    4
1    spark    13    5
1    flink    26    6
1    kafka    14    7
1    oozie    10    8

2 数据分析

    代码分析:最开始的思路:先过滤掉非广告的商品,再重新排序

select user_id,goods_name,goods_type,rk,if(goods_type != 26,row_number() over (partition by user_id order by rk),null) as rk1
from window_goods_test;

输出结果如下:显然没有达到预期的结果。

出错原因在于对窗口函数的执行原理及顺序不了解,可以通过执行计划来判断SQL执行顺序。

explain 
select user_id,goods_name,goods_type,rk,if(goods_type != 26,row_number() over (partition by user_id order by rk),null) as rk1
from window_goods_test;

具体执行步骤如下:

(1)扫描表

(2)按照user_id分组

(3)按照user_id和rk进行升序排序

(4)执行row_number()函数进行分析

(5)使用if进行判断

   由执行计划可以得出 if函数是在row_number()函数之后执行的

  上述sql可以拆解为三部分进行执行:

 step1:扫描表,获取select的结果集

select user_id,goods_name,goods_type,rk
from window_goods_test;

step2:执行窗口函数

select user_id,goods_name,goods_type,rk,row_number() over (partition by user_id order by rk) as rk1
from window_goods_test;

step3:基于step2结果集执行 if判断

因此正确代码如下:

方式一:union all 拆解成两段逻辑

-- 第一段逻辑:先限制goods_type != 26,再排序
selectuser_id,goods_name,goods_type,rk,row_number() over (partition by user_id order by rk) as rk1
from window_goods_test
where goods_type != 26
union all
-- 第二段逻辑:将goods_type = 26的记录的rk1 直接记为null
selectuser_id,goods_name,goods_type,rk,null as rk1
from window_goods_test
where goods_type = 26
order by rk;

 上述代码的缺点:window_goods_test表需要扫描两次,显然不是最优解。

优化的解题思路为:

方式二:

  step1:  partition by分组中先进行 if 语句过滤,如果goods_type!=26则取对应的user_id 进行分组,如果goods_type=26 则置为随机数rand(), 再按照随机数分组

 ps: 这里采用随机数是考虑到万一 goods_type=26的记录数很多,通过rand()随机分组可以将key值打散避免数据倾斜

selectuser_id,goods_name,goods_type,rk,row_number() over (partition byif(goods_type != 26, user_id, rand())order by rk) rk1
from window_goods_test

step2:在step1的外侧利用 if函数进一步判断


selectuser_id,goods_name,goods_type,rk,if(goods_type != 26,row_number() over (partition by if(goods_type != 26, user_id, rand()) order by rk),null) rk1
from window_goods_test

3 小结

   通过本案例得出的结论:

  • case when或if语句中嵌套窗口函数时,条件判断语句的执行顺序是在窗口函数之后的;
  • 窗口函数partition by 子句中是允许嵌套条件判断语句的;
http://www.yayakq.cn/news/211640/

相关文章:

  • 北京网站建设 爱牛申请app一般需要多少费用
  • 建站工具有哪些社区推广软件赚钱
  • 网站建设服务代理wordpress调用图片路径
  • 网站维护主要有哪些内容和方法昆明seo关键词
  • 门户网站建设的书籍汽车精品网站建设
  • 成都有哪些做网站的凡科互动登录
  • 建设网站成本网络工程师介绍
  • 专业网站设计 网络服务南京十大软件公司排名
  • 运营网站赚钱宛城区建网站
  • 国内做AI视频网站免费观看做企业网站类型
  • 一个wordpress程序搭建多个网站邯郸去哪做网站改版
  • 可以制作网站的软件有视频接口怎么做网站
  • 北京北控京奥建设有限公司网站网站改版声明
  • 怎样给网站做推广深圳网站制作的
  • 环保设备网站建设模板网站代理什么意思
  • 百度网站优化外包做网站时量宽度的尺子工具
  • 专业网站建设是哪家便宜怎么做盗版电影网站吗
  • 一家专门做特产的网站哈尔滨网站建设乙薇
  • 响应式网站制设计中国住房和城乡建设网官网
  • 1.申请网站空间网站设计与网页配色实例精讲pdf
  • 苏州市网站建设培训互联网备案查询
  • qq安全中心信任网站wordpress无法发送注册邮件
  • 网站服务器修改登录密码百度seo关键词外包
  • 网站seo链接购买动漫制作专业课程
  • 徐州市城乡建设局门户网站wordpress灯箱zoom
  • 单页网站 开元建设网站的流程
  • 做设计有哪些好用的素材网站黑龙江 建设监理协会网站
  • 郑州网站及优化ps图做ppt模板下载网站有哪些内容
  • 网络营销机构官方网站做网站便宜还是app便宜
  • 做网站与做app哪个容易长尾关键词在网站优化中起的作用有哪些