国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SQL實現(xiàn)一行數(shù)據(jù)分組后轉(zhuǎn)多行多列

這篇具有很好參考價值的文章主要介紹了SQL實現(xiàn)一行數(shù)據(jù)分組后轉(zhuǎn)多行多列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在統(tǒng)計一些指標時,通常會有多個指標需要分組進行聚合,但是數(shù)據(jù)源的粒度可能并非是指標分組的粒度。舉個例子,比如從訪客表中提取訪客的數(shù)據(jù),每行數(shù)據(jù)有每個平臺的首次訪問時間;另外要做一個平臺統(tǒng)計表,其中的一個指標統(tǒng)計的是各個平臺近1天、7天、30天的新訪客。這里的數(shù)據(jù)源的粒度是一行一個訪客,帶個平臺時間字段,但指標粒度是一行一個平臺,兩者不相同。

先加上標簽,一行多列變一行一列

????????由于數(shù)據(jù)源需要統(tǒng)計的字段是多個,因此也沒有辦法根據(jù)字段進行g(shù)roup by 聚合,只能普通的先count(if(時間篩選條件)),一次性將所有的1天、7天以及30天的各個平臺新增訪客統(tǒng)計出來于一行,并加上標簽區(qū)分平臺(時間不用區(qū)分,因為30天人數(shù)>7天>1天),可以外層套層sql用concat(人數(shù),'-',平臺)再collect_set()聚合到一個數(shù)組中,,我這里用的是odpsSQL的map()函數(shù).這時候數(shù)據(jù)變成了一行一列

再將數(shù)據(jù)從一行一列變成一行多列

????????這時我們只需要通過lateral view explode() 進行展開成一列多行。

拆解標簽變成多行多列帶分組標簽字段

????????再拆解出標簽,通過split()將平臺劃分成單獨的一個字段后,

將統(tǒng)計指標字段group by存入同一個標簽分組中

????????根據(jù)平臺進行g(shù)roup by ,再將1天、7天、30天的數(shù)據(jù)collect_set()裝入同一個數(shù)組中。

對數(shù)組中的數(shù)據(jù)進行處理得出字段

????????將數(shù)組通過排序,通過數(shù)組下標直接獲取對應(yīng)時間的新增訪客數(shù)。

總的代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-621315.html

select 
    platform,
    first_visit_count_list[0] as first_visit_count_1d,
    first_visit_count_list[1] as first_visit_count_7d ,
    first_visit_count_list[2] as first_visit_count_30d
from (
    select 
        platform,
        array_sort(collect_SET(first_visit_count),(l, r) -> CASE WHEN l < r THEN -1L WHEN l > r THEN 1L ELSE 0L END) as first_visit_count_list -- 30天>7天>1天,根據(jù)該規(guī)律排序數(shù)組即可
    from ( 
        select 
            map(    -- 存放在一個map里,便于展開
                -- 30天
                count(if(ssish_first_time>to_date(${bizdate-30},'yyyymmdd'),1,null)),'主站',
                count(if(mkf_first_time>to_date(${bizdate-30},'yyyymmdd'),1,null)),'my客蜂',
                count(if(cps_first_time>to_date(${bizdate-30},'yyyymmdd'),1,null)),'cps',
                count(if(wechatlink_first_time>to_date(${bizdate-30},'yyyymmdd'),1,null)),'微鏈',
                count(if(nyboss_first_time>to_date(${bizdate-30},'yyyymmdd'),1,null)),'保思',
                count(if(wxmall_first_time>to_date(${bizdate-30},'yyyymmdd'),1,null)),'微信商城',
            
                -- 7天
                count(if(ssish_first_time>to_date(${bizdate-7},'yyyymmdd'),1,null)),'主站',
                count(if(mkf_first_time>to_date(${bizdate-7},'yyyymmdd'),1,null)),'my客蜂',
                count(if(cps_first_time>to_date(${bizdate-7},'yyyymmdd'),1,null)),'cps',
                count(if(wechatlink_first_time>to_date(${bizdate-7},'yyyymmdd'),1,null)),'微鏈',
                count(if(nyboss_first_time>to_date(${bizdate-7},'yyyymmdd'),1,null)),'保思',
                count(if(wxmall_first_time>to_date(${bizdate-7},'yyyymmdd'),1,null)),'微信商城',

                -- 昨天
                count(if(ssish_first_time>to_date(${bizdate},'yyyymmdd'),1,null)),'主站',
                count(if(mkf_first_time>to_date(${bizdate},'yyyymmdd'),1,null)),'my客蜂',
                count(if(cps_first_time>to_date(${bizdate},'yyyymmdd'),1,null)),'cps',
                count(if(wechatlink_first_time>to_date(${bizdate},'yyyymmdd'),1,null)),'微鏈',
                count(if(nyboss_first_time>to_date(${bizdate},'yyyymmdd'),1,null)),'保思',
                count(if(wxmall_first_time>to_date(${bizdate},'yyyymmdd'),1,null)),'微信商城'
            )
            as platform_first_visit_count_list
        from nanyan_space.dim_visitors_info 
        where pt='${bizdate}'
    )a1
    lateral view explode(platform_first_visit_count_list) tmp as first_visit_count,platform
    group by platform
)a2

到了這里,關(guān)于SQL實現(xiàn)一行數(shù)據(jù)分組后轉(zhuǎn)多行多列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 行轉(zhuǎn)列--將多行數(shù)據(jù)轉(zhuǎn)成多行多列的Table結(jié)構(gòu)

    行轉(zhuǎn)列--將多行數(shù)據(jù)轉(zhuǎn)成多行多列的Table結(jié)構(gòu)

    21年做的一個功能,涉及到將行數(shù)據(jù)轉(zhuǎn)化成列數(shù)據(jù)。邊查邊做,一點一點的嘗試著做好。當時感覺有點吃力。完成之后本想記錄,但一直拖延至今。最近再次接手與這個功能相關(guān)的業(yè)務(wù),整理了之前寫的代碼,趁此機會記錄下來。 界面中是一個三級結(jié)構(gòu):L1級【Test Sample】,

    2024年02月05日
    瀏覽(20)
  • Hive SQL——explode拆分函數(shù)&多行(列)合并為一行(列)&reflect函數(shù)

    cd /data/import/ sudo vi test_explode_map_array.txt 添加以下文件內(nèi)容 小明?? ?產(chǎn)品1,產(chǎn)品2,產(chǎn)品3?? ?性別:男,年齡:24 小花?? ?產(chǎn)品4,產(chǎn)品5,產(chǎn)品6?? ?性別:女,年齡:22? map_key map_value 年齡 24 性別 男 年齡 22 性別 女 prod_arr_new 產(chǎn)品1 產(chǎn)品2 產(chǎn)品3 產(chǎn)品4 產(chǎn)品5 產(chǎn)品6 name prod_arr_new 小明 產(chǎn)品1

    2024年02月15日
    瀏覽(24)
  • 【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接

    【ORACLE】數(shù)據(jù)拼接那些事-多行或多列按指定分隔符拼接

    最近在做的某個項目中有一些數(shù)據(jù)預(yù)處理的工作,用的是Oracle數(shù)據(jù)庫,涉及到表的拼接操作,在此記錄一下并對數(shù)據(jù)庫表的拼接知識做個擴充。 具體需求是: 把年齡(AGE)、性別(GENDER)、客戶等級(CUSLEVEL)三個字段用逗號隔開拼接成一個字段 為空的字段不展示,三個字段全為空

    2023年04月16日
    瀏覽(23)
  • mysql中將多行數(shù)據(jù)合并成一行數(shù)據(jù)

    mysql中將多行數(shù)據(jù)合并成一行數(shù)據(jù)

    mysql中將多行數(shù)據(jù)合并成一行數(shù)據(jù) 一個字段可能對應(yīng)多條數(shù)據(jù),用mysql實現(xiàn)將多行數(shù)據(jù)合并成一行數(shù)據(jù) 例如:一個活動id(activeId)對應(yīng)多個模塊名(modelName),按照一般的sql語句: SELECT am.activeId,m.modelName FROM activemodel am JOIN model m ON am.modelId = m.modelId ORDER BY am.activeId 查詢出的列

    2024年02月16日
    瀏覽(16)
  • Hive多行轉(zhuǎn)多列,多列轉(zhuǎn)多行

    Hive多行轉(zhuǎn)多列,多列轉(zhuǎn)多行

    原始數(shù)據(jù)表 目標結(jié)果表 分析:目標表中的a和b是用分組形成,所以groupby字段選用原始表中col1,c、d、e是原始表中的行值,在目標表中成了列名,目標表中可以采用as做列名自定義,當原始表中的某一字段值等于某一特定值時,人為定義為結(jié)果表中的列名。 SQL實現(xiàn) 總結(jié):多行

    2024年02月12日
    瀏覽(31)
  • 多行文本轉(zhuǎn)成一行的實現(xiàn)方法

    多行文本轉(zhuǎn)成一行的實現(xiàn)方法

    哈嘍大家好,我是咸魚 不知道你們有沒有遇到過下面的情況,以我為例 有時候我會收到批量操作服務(wù)器的需求,且我會拿到一個服務(wù)器 ip 列表,它是一個多行的形式,如下所示 但我使用 saltstack 進行批量操作時,我需要將上面的多行 ip 轉(zhuǎn)成一行的形式才能執(zhí)行 saltstack 命令

    2024年02月13日
    瀏覽(20)
  • 使用Notepad++將多行數(shù)據(jù)合并成一行

    使用Notepad++將多行數(shù)據(jù)合并成一行

    1、按Ctrl+F,彈出“替換”的窗口; 2、選擇“替換”菜單; 3、“查找目標”內(nèi)容輸入為:rn; 4、“替換為”內(nèi)容為空; 5、“查找模式”選擇為正則表達式; 6、設(shè)置好之后,點擊“全部替換”,即可將多行數(shù)據(jù)合并成一行

    2024年01月23日
    瀏覽(16)
  • C語言——讀寫TXT文件中的(多行多列矩陣型)浮點型數(shù)據(jù)的兩種方式

    C語言——讀寫TXT文件中的(多行多列矩陣型)浮點型數(shù)據(jù)的兩種方式

    文本行輸入函數(shù):fgets(讀文本) 函數(shù)原型 參數(shù) str – 這是指向一個字符數(shù)組的指針,該數(shù)組存儲了要讀取的字符串。 n – 這是要讀取的最大字符數(shù)(包括最后的空字符)。通常是使用以 str 傳遞的數(shù)組長度。 stream – 這是指向 FILE 對象的指針,該 FILE 對象標識了要從中讀取字

    2023年04月08日
    瀏覽(24)
  • mysql一行逗號分割的數(shù)據(jù)分解為多行

    在 MySQL 中,你可以使用函數(shù) REPLACE 和 SUBSTRING_INDEX 來將一行逗號分隔的數(shù)據(jù)分解為多行。 例如,假設(shè)你有一個表,其中包含一列 items ,該列包含逗號分隔的字符串,如下所示: 你可以使用以下查詢來將該表中的每一行數(shù)據(jù)分解為多行: 該查詢會返回如下所示的結(jié)果: 你也

    2024年02月15日
    瀏覽(21)
  • Java8用Stream流一行代碼實現(xiàn)數(shù)據(jù)分組統(tǒng)計,排序,最大值、最小值、平均值、總數(shù)、合計

    Java8用Stream流一行代碼實現(xiàn)數(shù)據(jù)分組統(tǒng)計,排序,最大值、最小值、平均值、總數(shù)、合計

    Java8對數(shù)據(jù)處理可謂十分流暢,既不改變數(shù)據(jù),又能對數(shù)據(jù)進行很好的處理,今天給大家演示下,用Java8的Stream如何對數(shù)據(jù)進行分組統(tǒng)計,排序,求和等 匯總統(tǒng)計方法 找到匯總統(tǒng)計的方法。這些方法屬于java 8的匯總統(tǒng)計類。 getAverage(): 它返回所有接受值的平均值。 getCount():

    2023年04月20日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包