工作中有一張型別資訊表,有時候需要不同的型別資訊需要多次掃瞄這張表,表很大的時候影響效率。
優化前:
select t1.fa_id,t2.srch_char_val,t3.srch_char_val from(select fa_id from
cisadm_ods.ods_cis_ci_fa_df ) t1
left
join
(select
*from cisadm_ods.ods_cis_ci_fa_char_df where trim(char_type_cd)=
"aaaa") t2
on t1.fa_id=
t2.fa_id
left
join
(select
*from cisadm_ods.ods_cis_ci_fa_char_df where trim(char_type_cd)=
"bbbb") t3
on t1.fa_id=t3.fa_id
優化後:
使用collect_set(if())這種方式對值進行條件聚合,然後把值從set中取出
selectfa_id
,collect_set(
if(trim(char_type_cd) = "wxsfcg",srch_char_val,null))[0]
,collect_set(
if(trim(char_type_cd) = "zylx",srch_char_val,null))[0]
from
cisadm_ods.ods_cis_ci_fa_char_df
where trim(char_type_cd) in
("wxsfcg","zylx")
group
by fa_id
Java還要再學一遍基礎(十四)實現斐波那契數列
費波那契數列 義大利語 successione di fibonacci 又譯為 費波拿契數 斐波那契數列 費氏數列 分割數列。指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以 遞迴的方法定義 f 0 0,f 1 1,f n f n 1 f n 2 n ...
求第一次只出現一次的字元(只要求遍歷一遍)
解決思路 1 使用雜湊表,hash 256 遍歷一遍字串,得到每個字元出現的次數。2 設定乙個order陣列,記錄字元出現的次序,然後遍歷次序陣列,在hash表中找出它出現的次數,如果為1,那就找到符合要求的字元了。比如字串為 abccaffdde 那麼存放在order陣列的字元就為order 如下...
力扣演算法題1(學完雜湊表再來寫一遍)
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...