SQLは、行内データのきめ細かい重複排除を実現します

以前の作業で遭遇した問題のいくつかは、言うまでもなく、これらの状況を簡単に共有して、直接問題に行きましょう。

1.問題の背景

上の図のデータ効果を下の図の効果に変換します

マネージャー
["aa"、 "aa"、 "aa"、 "bb"、 "bb"]
["cc"、 "cc"、 "dd"]
["1"、 "2"、 "1"、 "2"、 "3"]
マネージャー
aa、bb
cc、dd
1,2,3

2.実装のアイデア

  • 最初のステップは、横方向のexplode()関数の側面図を使用してマネージャー列を開くことです。
  • 2番目のステップは、wm_concat()関数をgroup byと組み合わせて使用​​して、重複データを削除することです。

3.コードの実装

        select approvalid
        ,subProductTag
        ,regexp_replace(wm_concat(distinct managers,','),'"','')as manager
        from (
            SELECT approvalid
            ,subProductTag
            ,managers
            FROM (SELECT approvalid,subproducttag,manager FROM a WHERE ftime = %(dateFrom)s)tmp
                lateral view explode(split(substr(manager,2,length(manager)-2),','))tmp1 as managers)
        group by approvalid,subProductTag

4.まとめ

全体的な考え方は、最初に拡張してから集約することです。他に優れた実装方法がある場合は、下のコメントセクションで自由に考えを表明してください。

 

おすすめ

転載: blog.csdn.net/ALIVEE/article/details/107763939