SQL语句深度解析:用户产品数据统计与分析

本文将深入浅出地解析一段SQL查询语句,该语句旨在统计不同渠道、不同产品线的用户数据,并将结果插入到临时表中。

**以下是待解析的SQL语句:**sqlinsert overwrite table temp_lgl_gw_dev partition (month_id = '${v_month}')select b.prov_id, b.chnl_type, b.user_num, b.innet_num, b.acct_num, b.m_fee, b.total_feefrom ( select b.prov_id, case when level1_id = 'P03' then '基础数据产品线(全渠道)' when level2_id = 'P0401' then '互联网专线产品系列(全渠道)' else '其他' end chnl_type, count(distinct b.user_id) user_num, count(distinct case when b.is_innet = '1' then b.user_id end) innet_num, count(distinct case when b.is_acct = '1' then b.user_id end) acct_num, sum(case when c.month_id = '${v_month}' then c.total_fee end) m_fee, sum(c.total_fee) total_fee from ( select cbss_user_id user_id, prov_id, is_innet, is_acct, pro_center_level1_id level1_id, pro_center_level2_id level2_id from zq_dwa.dwa_m_cus_al_user_sxpro_pd --linjh 由db_der.zq_dwa.dwa_m_cus_al_user_sxpro_pd修改为zq_dwa.dwa_m_cus_al_user_sxpro_pd where month_id between '${v_first_month}' and '${v_month}' and is_add = '1' group by cbss_user_id, prov_id, is_innet, is_acct, 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 --linjh 由db_der.DWD_M_ACC_CB_F_BILL_AFTER修改为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 -- 省略后续代码... ) bwhere b.chnl_type <> '其他'order by b.prov_id, b.chnl_type;

语句解析:

  1. 数据插入与分区: - insert overwrite table temp_lgl_gw_dev partition (month_id = '${v_month}'): 将查询结果写入到名为 temp_lgl_gw_dev 的临时表中,并根据 month_id 进行分区。

  2. 多层嵌套子查询: - 该语句使用了多层嵌套子查询,从最内层的用户数据表开始,逐步聚合并筛选数据。 - 每个子查询都包含以下步骤: - 从原始数据表中获取用户ID、省份ID、产品线ID、入网状态、开户状态等信息。 - 根据条件筛选数据,例如:时间范围、新增用户等。 - 按照用户ID、省份ID、产品线ID等进行分组。 - 使用 case when 语句对产品线进行分类,例如:基础数据产品线、互联网专线产品系列等。 - 使用聚合函数统计用户数量、入网用户数量、费用等指标。

  3. 多表连接: - 使用 left join 将用户数据表和账单数据表连接起来,以便计算用户的费用信息。

  4. 数据汇总与筛选: - 使用 union all 将不同渠道、不同产品线的数据合并在一起。 - 使用 where 语句过滤掉渠道类型为 '其他' 的数据。 - 使用 order by 语句按照省份ID和渠道类型对结果进行排序。

总结:

该SQL语句通过多表连接、子查询、条件聚合等技巧,实现了对用户产品数据的复杂统计和分析。它清晰地展示了如何从原始数据中提取有价值的信息,并为后续的业务决策提供数据支


原文地址: https://www.cveoy.top/t/topic/fBh7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录