SQL案例解析:分层统计用户发展数据 - 从全国到省份

本文将通过一个SQL代码案例,带你学习如何进行分层数据统计。我们将从一个名为'temp_lgl_sx_dev_220518'的原始表中提取用户发展数据,并分别计算全国、区域以及省份级别的统计指标,最终将结果插入'temp_lgl_sx_dev_result'目标表中。

**代码:**sqlinsert overwrite table temp_lgl_sx_dev_result partition (month_id = '${v_month}')select '全国' prov_part, pro, sum(cast(user_num as int)) user_num,--本年累计新发展用户数 sum(cast(innet_num as int)) innet_num,--本年新发展用户统计当月在网用户数 sum(cast(acct_num as int)) acct_num,--本年新发展用户统计当月出账用户数 sum(cast(m_fee as double)) m_fee,--本年新发展用户统计当月出账收入 sum(cast(total_fee as double)) total_fee--本年新发展用户本年累计出账收入from temp_lgl_sx_dev_220518where month_id = '${v_month}'group by '全国',prounion allselect b.prov_part, a.pro, sum(cast(user_num as int)) user_num, sum(cast(innet_num as int)) innet_num, sum(cast(acct_num as int)) acct_num, sum(cast(m_fee as double)) m_fee, sum(cast(total_fee as double)) total_feefrom ( select prov_id, pro, total_fee, user_num, innet_num, acct_num, m_fee from temp_lgl_sx_dev_220518 where month_id = '${v_month}' ) a left join ( select prov_id, prov_desc, case when ord_id3 <= 10 then '北10' when ord_id3 > 10 then '南21' end prov_part from DIM_PROV_ORD ) b on a.prov_id = b.prov_idgroup by b.prov_part,a.prounion allselect b.prov_desc prov_part, pro, cast(user_num as int) user_num, cast(innet_num as int) innet_num, cast(acct_num as int) acct_num, cast(m_fee as double) m_fee, cast(total_fee as double) total_feefrom temp_lgl_sx_dev_220518 aleft join( select prov_id, prov_desc from DIM_PROV_ORD ) b on a.prov_id = b.prov_idwhere month_id = '${v_month}';

代码解析:

这段代码的核心是三个UNION ALL语句,分别对应全国、区域和省份三个级别的统计:

  1. 全国数据统计: - 直接从 temp_lgl_sx_dev_220518 表中提取数据,并根据 '全国'pro 字段进行分组聚合,计算全国及各产品的新发展用户数、在网用户数、出账用户数、出账收入和累计出账收入。

  2. 区域数据统计: - 首先从 temp_lgl_sx_dev_220518 表中提取所需字段的数据; - 然后与 DIM_PROV_ORD 表进行左连接,根据省份ID (prov_id) 获取区域划分信息 (prov_part),并将省份按照 ord_id3 字段划分为 '北10' 和 '南21' 两个区域; - 最后根据区域 (prov_part) 和产品 (pro) 进行分组聚合,计算各区域及各产品的统计指标。

  3. 省份数据统计: - 与区域数据统计类似,同样先从 temp_lgl_sx_dev_220518 表中提取数据,并与 DIM_PROV_ORD 表进行左连接,获取省份名称 (prov_desc); - 最后根据省份 (prov_desc) 和产品 (pro) 进行分组聚合,计算各省份及各产品的统计指标。

最终,通过 UNION ALL 将三部分结果合并,并插入到 temp_lgl_sx_dev_result 表的指定分区中,分区由变量 v_month 决定。

总结:

这段SQL代码清晰地展示了如何利用 UNION ALL 和表连接实现分层数据统计,并通过简洁的代码和注释,使得代码易于理解和维护

SQL案例解析:分层统计用户发展数据 | 全国、区域、省份三级汇总

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

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