<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      數倉sql場景:迭代求結果問題

      1.需求

      2.應用場景

      簡單的線性預測銷售額,比如三月份累計銷售額應該達到2a+b,實際a+b+c看看差距
      

      3.sql實現

      這道題先需要去分析結果集,本質上是一個迭代累加的過程,先要得到如下結果
      

      如果在面試數倉中實現了以上結果,基本上面試官會很通過,也在短時間內可以實現,實現sql如下
      
      with tb as (
      select 1 as s,'a' as pv
      union all
      select 2 as s,'b' as pv
      union all
      select 3 as s,'c' as pv
      union all
      select 4 as s,'d' as pv
      union all
      select 5 as s,'e' as pv
      union all
      select 6 as s,'f' as pv
      )
      
      select s,pv,concat_ws('+',collect_list(re1) OVER (ORDER BY s ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) from 
      (select *,concat_ws('+',collect_list(pv) OVER (ORDER BY s ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) as re1 from tb) tb1;
      
      首先開窗將pv分組連接起來作為一個結果集,然后再將結果集分組連接起來。核心知識點:collect_list,concat_ws,開窗函數及開窗中的ROWS BETWEEN。其中`ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`為開始行到當前行
      

      另一種實現方式,通過不斷解析實現,分組實現,這種實現主要考察對sql的深度理解和組裝,實現起來還是比較復雜的,sql如下
      
      with tb as (
      select '1' as s,'a' as pv
      union all
      select '2' as s,'b' as pv
      union all
      select '3' as s,'c' as pv
      union all
      select '4' as s,'d' as pv
      union all
      select '5' as s,'e' as pv
      union all
      select '6' as s,'f' as pv
      ),
      tb1 as 
      (select *,
      concat_ws(',',collect_list(pv) OVER (ORDER BY s ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)) as pv_n,
      reverse(concat_ws(',',collect_list(s) OVER (ORDER BY s ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW))) as s_n 
      from tb),
      tb2 as 
      (select s,pv,pv_n,s_n from tb1 
      lateral view explode(SPLIT(pv_n,',')) tb1 as pv_n),
      tb3 as 
      (select *,row_number() over(partition by s order by pv_n) as rn from tb2)
      select s,pv,concat_ws('+',collect_list(concat(pv_n,'*',split(s_n,',')[rn-1]))) as res from tb3 group by s,pv order by s;
      
      該種實現方式包含的知識點比較多,包括collect_list,concat_ws,lateral view explode,開窗函數。其中將開窗出來的值作為切割出來的數組下標來使用這種思路在實際中不容易想到。但這個sql本質上有隱患,其中reverse函數如果s字段超過個位數后存在問題,當做練sql吧 實際中要多想想
      

      上圖中,要取pv_n*s_n[rn-1],然后再將結果連接起來
      

      然后再分組連接起來
      

      posted @ 2024-08-02 17:10  技術即藝術  閱讀(41)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 熟妇激情一区二区三区| 日本一本无道码日韩精品| 亚洲国产日韩A在线亚洲| 天津市| 成人国产精品免费网站| 欧美综合婷婷欧美综合五月| 婷婷久久香蕉五月综合加勒比 | 国产乱子伦精品免费无码专区 | 国产AV大陆精品一区二区三区| 精品无码国产不卡在线观看| 91午夜福利一区二区三区| 一级做a爰片在线播放| 色窝窝免费播放视频在线| 精品久久久久中文字幕日本 | 大陆一级毛片免费播放| 国产最新AV在线播放不卡| 国产精品一区二区黄色片| 北岛玲中文字幕人妻系列| 亚洲 日韩 国产 制服 在线 | 国产中文成人精品久久久| 五原县| 人人做人人澡人人人爽| 婷婷开心色四房播播| 久久国产免费直播| 日韩精品一区二区三区在| 免费又黄又爽又猛的毛片| gogogo高清在线播放免费| 久久精品国产最新地址| 国产农村妇女毛片精品久久| 国产卡一卡二卡三免费入口| 亚在线观看免费视频入口| 国产精品视频午夜福利| 无码专区 人妻系列 在线| 亚洲区欧美区综合区自拍区| 精精国产xxx在线观看| 农村老熟妇乱子伦视频| 色综合久久中文字幕综合网 | 26uuu另类亚洲欧美日本| 人妻系列无码专区无码中出 | 国产成人精品国内自产色| 久久精品国产亚洲av麻豆长发|