SQL代码解析:用户费用统计与分区插入

本篇文章将详细分析一段SQL代码,该代码用于统计不同省份和产品类型的用户费用,并将结果插入到一个临时分区表中。sqlinsert overwrite table temp_lgl_sx_dev_charge partition (month_id = '${v_month}')select b.prov_id, b.pro_type, sum(case when b.month_id = '${v_month}' then c.total_fee end) m_fee, sum(c.total_fee) total_feefrom ( select prov_id, cbss_user_id user_id, month_id, case when pro_center_level2_id = 'P0301' then '网元出租产品系列' else pro_center_level3_name end pro_type 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 user_id is not null group by prov_id, cbss_user_id, month_id, case when pro_center_level2_id = 'P0301' then '网元出租产品系列' else pro_center_level3_name end ) 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 and b.month_id=c.month_id --xulk addgroup by b.prov_id, b.pro_type;

代码解读:

  1. 数据插入与分区: INSERT OVERWRITE 语句将查询结果覆盖插入到名为 temp_lgl_sx_dev_charge 的分区表中。partition (month_id = '${v_month}') 指定了数据插入到哪个分区,这里使用了变量 ${v_month} 表示月份。

  2. 主查询: 使用 SELECT 语句从两个子查询的结果中获取数据。

  3. 子查询 b: - 从表 zq_dwa.dwa_m_cus_al_user_sxpro_pd 中查询用户信息和产品类型。 - 使用 CASE WHEN 语句根据 pro_center_level2_idpro_center_level3_name 字段对产品类型进行分类。 - 使用 GROUP BYprov_id, cbss_user_id, month_idpro_type 进行分组。

  4. 子查询 c: - 从表 dwd.DWD_M_ACC_CB_F_BILL_AFTER 中查询用户的费用信息。 - 使用 GROUP BYuser_idmonth_id 进行分组,计算每个用户每月的总费用。

  5. 连接操作: 使用 LEFT JOIN 将子查询 b 和 c 连接起来,连接条件是用户的 ID 和月份相同 (b.user_id = c.user_id and b.month_id=c.month_id)。

  6. 分组聚合: 最后使用 GROUP BY 对结果按照省份 (b.prov_id) 和产品类型 (b.pro_type) 进行分组,并使用 SUM 函数计算每个分组的费用总和。

总结:

这段代码通过两个子查询分别获取用户信息和费用信息,然后使用 LEFT JOIN 将两者关联起来。最后,使用 GROUP BY 对结果进行分组聚合,并将统计结果插入到指定分区表中。该代码结构清晰,逻辑严谨,展示了SQL语言在数据处理方面的强大功能。

SQL代码解析:用户费用统计与分区插入

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

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