SQL案例解析:分层统计用户发展数据 | 全国、区域、省份三级汇总
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语句,分别对应全国、区域和省份三个级别的统计:
-
全国数据统计: - 直接从
temp_lgl_sx_dev_220518表中提取数据,并根据'全国'和pro字段进行分组聚合,计算全国及各产品的新发展用户数、在网用户数、出账用户数、出账收入和累计出账收入。 -
区域数据统计: - 首先从
temp_lgl_sx_dev_220518表中提取所需字段的数据; - 然后与DIM_PROV_ORD表进行左连接,根据省份ID (prov_id) 获取区域划分信息 (prov_part),并将省份按照ord_id3字段划分为 '北10' 和 '南21' 两个区域; - 最后根据区域 (prov_part) 和产品 (pro) 进行分组聚合,计算各区域及各产品的统计指标。 -
省份数据统计: - 与区域数据统计类似,同样先从
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 和表连接实现分层数据统计,并通过简洁的代码和注释,使得代码易于理解和维护
原文地址: https://www.cveoy.top/t/topic/fBw8 著作权归作者所有。请勿转载和采集!