SQL代码案例解析:用户收入分产品线统计
SQL代码案例解析:用户收入分产品线统计
本案例将解析一段SQL查询语句,该语句用于统计不同产品线和渠道的用户收入。
代码目标:
这段代码旨在计算每个省份、每种渠道类型(基础数据产品线、互联网专线产品系列等)的当月收入和累计收入,并将结果插入到名为 temp_lgl_gw_dev_charge 的临时表中,并按月份分区存储。
**代码解析:**sqlinsert overwrite table temp_lgl_gw_dev_charge partition (month_id = '${v_month}')select a.prov_id, a.chnl_type, a.m_fee, a.total_feefrom ( -- 全渠道用户收入 select b.prov_id, case when level1_id = 'P03' then '基础数据产品线(全渠道)' when level2_id = 'P0401' then '互联网专线产品系列(全渠道)' else '其他' end chnl_type, sum(case when c.month_id = '${v_month}' then c.total_fee end) m_fee, sum(c.total_fee) total_fee from ( -- 获取用户产品信息 select prov_id, cbss_user_id user_id, pro_center_level1_id level1_id, pro_center_level2_id level2_id from zq_dwa.dwa_m_cus_al_user_sxpro_pd where month_id between '${v_first_month}' and '${v_month}' group by prov_id, cbss_user_id, pro_center_level1_id, pro_center_level2_id ) b left join ( -- 获取用户账单信息 select user_id, month_id, sum(total_fee) total_fee from dwd.DWD_M_ACC_CB_F_BILL_AFTER where month_id between '${v_first_month}' and '${v_month}' group by user_id, month_id ) c on b.user_id = c.user_id group by b.prov_id, case when level1_id = 'P03' then '基础数据产品线(全渠道)' when level2_id = 'P0401' then '互联网专线产品系列(全渠道)' else '其他' end -- 政企渠道用户收入 union all select b.prov_id, case when b.level1_id = 'P03' then '基础数据产品线(政企渠道)' when b.level2_id = 'P0401' then '互联网专线产品系列(政企渠道)' when (b.level2_id = 'P0502' or (b.level1_id = 'P04' and b.level2_id <> 'P0401')) then '普通宽带(政企渠道)' else '其他' end chnl_type, sum(case when c.month_id = '${v_month}' then c.total_fee end) m_fee, sum(c.total_fee) total_fee from ( -- 获取用户产品信息(包含政企标识) select prov_id, cbss_user_id user_id, pro_center_level1_id level1_id, pro_center_level2_id level2_id, is_zq_develop from zq_dwa.dwa_m_cus_al_user_sxpro_pd where month_id between '${v_first_month}' and '${v_month}' group by prov_id, cbss_user_id, pro_center_level1_id, pro_center_level2_id, is_zq_develop ) b left join ( -- 获取用户账单信息 select user_id, month_id, sum(total_fee) total_fee from dwd.DWD_M_ACC_CB_F_BILL_AFTER where month_id between '${v_first_month}' and '${v_month}' group by user_id, month_id ) c on b.user_id = c.user_id left join ( -- 获取政企渠道用户信息 select a.user_id from ( select user_id, develop_channel_id from dwa.dwa_v_m_cus_cb_user_info where month_id between '${v_first_month}' and '${v_month}' and is_this_dev = '1' ) a inner join ( select chnl_id, month_id from dwd.DWD_M_MRT_AL_CHL_CHANNEL where month_id between '${v_first_month}' and '${v_month}' and chnl_kind_id in ('1020200', '1010500', '2020200', '2050400') group by chnl_id, month_id ) b on a.develop_channel_id = b.chnl_id ) a on b.user_id = a.user_id where (b.is_zq_develop = '1' or a.user_id is not null) group by b.prov_id, case when b.level1_id = 'P03' then '基础数据产品线(政企渠道)' when b.level2_id = 'P0401' then '互联网专线产品系列(政企渠道)' when (b.level2_id = 'P0502' or (b.level1_id = 'P04' and b.level2_id <> 'P0401')) then '普通宽带(政企渠道)' else '其他' end -- ... 其他渠道收入 (代码结构类似,省略) ) awhere a.chnl_type <> '其他'order by a.prov_id, a.chnl_type;
代码解读:
- 数据源: 代码主要使用以下几张表: -
zq_dwa.dwa_m_cus_al_user_sxpro_pd: 用户产品关系表,包含用户ID, 省份, 产品线信息等。 -dwd.DWD_M_ACC_CB_F_BILL_AFTER: 用户账单表,包含用户ID, 月份, 收入等。 -dwa.dwa_v_m_cus_cb_user_info: 用户信息表,包含用户ID, 发展渠道等。 -dwd.DWD_M_MRT_AL_CHL_CHANNEL: 渠道信息表。2. 嵌套查询: 代码使用了多层嵌套查询,将不同数据源的数据关联起来。3. 表连接: 使用LEFT JOIN将用户产品信息与账单信息关联,并根据条件筛选出目标用户。4. 条件聚合: 使用CASE WHEN语句对不同产品线进行分类,并使用SUM()函数计算每个分类的收入。5. UNION ALL: 将不同渠道的统计结果合并到一起。
总结:
这段SQL代码展示了如何利用嵌套查询、表连接、条件聚合等技巧,从多个数据表中提取、清洗、整合数据,最终生成用户收入报表。
原文地址: https://www.cveoy.top/t/topic/fBhF 著作权归作者所有。请勿转载和采集!