1. 程式人生 > 實用技巧 >實現分析函式

實現分析函式

SELECT 
    region,
    country,
    category,
    max(multiIf(rownumber = 1, app, '')) AS col1,
    max(multiIf(rownumber = 2, app, '')) AS col2,
    max(multiIf(rownumber = 3, app, '')) AS col3,
    max(multiIf(rownumber = 4, app, '')) AS col4,
    max(multiIf(rownumber = 5, app, '')) AS col5,
    max(multiIf(rownumber = 6, app, '')) AS col6,
    max(multiIf(rownumber = 7, app, '')) AS col7,
    max(multiIf(rownumber = 8, app, '')) AS col8,
    max(multiIf(rownumber = 9, app, '')) AS col9,
    max(multiIf(rownumber = 10, app, '')) AS col10,
    max(multiIf(rownumber = 11, app, '')) AS col11,
    max(multiIf(rownumber = 12, app, '')) AS col12,
    max(multiIf(rownumber = 13, app, '')) AS col13,
    max(multiIf(rownumber = 14, app, '')) AS col14,
    max(multiIf(rownumber = 15, app, '')) AS col15,
    max(multiIf(rownumber = 16, app, '')) AS col16,
    max(multiIf(rownumber = 17, app, '')) AS col17,
    max(multiIf(rownumber = 18, app, '')) AS col18,
    max(multiIf(rownumber = 19, app, '')) AS col19,
    max(multiIf(rownumber = 20, app, '')) AS col20,
    max(multiIf(rownumber = 21, app, '')) AS col21,
    max(multiIf(rownumber = 22, app, '')) AS col22,
    max(multiIf(rownumber = 23, app, '')) AS col23,
    max(multiIf(rownumber = 24, app, '')) AS col24,
    max(multiIf(rownumber = 25, app, '')) AS col25,
    max(multiIf(rownumber = 26, app, '')) AS col26,
    max(multiIf(rownumber = 27, app, '')) AS col27,
    max(multiIf(rownumber = 28, app, '')) AS col28,
    max(multiIf(rownumber = 29, app, '')) AS col29,
    max(multiIf(rownumber = 30, app, '')) AS col30
FROM 
(
    SELECT 
        region,
        country,
        category,
        app,
        weight,
        rownumber
    FROM 
    (
        SELECT 
            region,
            country,
            category,
            groupArray(app_id) AS arr_app,
            groupArray(weight) AS arr_weight,
            arrayEnumerate(arr_weight) AS rownumber
        FROM 
        (
            SELECT 
                region,
                country,
                category,
                app_id,
                (sum(active_cnt) / sum(total_active_cnt)) * (sum(duration) / sum(vd_dt_cnt)) AS weight
            FROM test.f_local_app_rank
            GROUP BY 
                region,
                country,
                category,
                app_id
            ORDER BY weight DESC
        ) AS A
        GROUP BY 
            region,
            country,
            category
    ) AS AA
    ARRAY JOIN 
        arr_app AS app,
        arr_weight AS weight,
        rownumber
) AS AAA
GROUP BY 
    region,
    country,
    category
ORDER BY 
    region ASC,
    country ASC,
    category ASC
FORMAT CSV