开发者社区> 问答> 正文

如何按投放策略建立两两对比组,按组对比展示不同策略转化单量情况?

现有投放策略转化表,该表内的一条数据,表示一天内某投放策略带来的订单量。

-- SQL - 15
with strategy_order as (
select stack(
3,
'2024-01-01', 'Strategy A', 10,
'2024-01-01', 'Strategy B', 20,
'2024-01-01', 'Strategy C', 30
) 
-- 字段:日期,投放策略,单量
as (dt, strategy, order_cnt)
)
select * from strategy_order;

如何按投放策略建立两两对比组,按组对比展示不同策略转化单量情况?image.png

展开
收起
真的很搞笑 2024-05-07 19:15:50 47 0
1 条回答
写回答
取消 提交回答
  • • 解决思路
    核心思路是从所有投放策略列表中不重复地取出 2 个策略,生成所有的组合结果,然后关联 strategy_order 表分组统计结果。
    • SQL 实现

    SQL - 16
    select /*+ mapjoin(combs) */
    combs.strategy_comb,
    so.strategy,
    so.order_cnt
    from strategy_order so
    join ( -- 生成所有对比组
    select 
    concat(least(val1, val2), '-', greatest(val1, val2)) as strategy_comb,
    least(val1, val2) as strategy_1, greatest(val1, val2) as strategy_2
    from (
    select collect_set(strategy) as strategies
    from strategy_order
    ) dummy
    lateral view explode(strategies) t1 as val1
    lateral view explode(strategies) t2 as val2
    where val1 <> val2
    group by least(val1, val2), greatest(val1, val2)
    ) combs on 1 = 1
    where so.strategy in (combs.strategy_1, combs.strategy_2)
    order by combs.strategy_comb, so.strategy;
    

    image.png

    2024-05-07 20:34:59
    赞同 2 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载