SQL脚本分析:计算不同产品类型用户数量和费用
这段代码是一个SQL语句,用于执行一个脚本。下面是这段代码的详细分析:
-
这段代码的目的是将查询结果插入到名为'temp_lgl_sx_dev_220518'的表中,同时将结果按照月份进行分区。
-
查询的字段包括:'prov_id'(省份ID)、'pro_type'(产品类型)、'count(distinct c.user_id)'(不重复的用户数量)、'count(distinct case when a.is_innet = 1 then c.user_id end)'(满足条件'is_innet = 1'的用户数量)、'count(distinct case when a.is_acct = 1 then c.user_id end)'(满足条件'is_acct = 1'的用户数量)、'sum(case when b.month_id = '${v_month}' then b.total_fee end) m_fee'(满足条件'b.month_id = '${v_month}'的总费用)、'sum(b.total_fee) total_fee'(总费用)。
-
查询的数据来源是两个子查询和一个表。
-
第一个子查询(标记为'c')从表'zq_dwa.dwa_m_cus_al_user_sxpro_pd'中选择字段'cbss_user_id'、'prov_id'和'pro_type',其中'pro_type'根据条件'pro_center_level2_id'的值进行判断,如果为'P0301',则为'网元出租产品系列',否则为'pro_center_level3_name'。该子查询还使用了'WHERE'子句进行筛选,条件为'month_id'在'${v_first_month}'和'${v_month}'之间,'is_add'为'1'。最后使用'GROUP BY'子句对'cbss_user_id'、'prov_id'和'pro_type'进行分组。
-
第二个子查询(标记为'a')从表'zq_dwa.dwa_m_cus_al_user_sxpro_pd'中选择字段'cbss_user_id'、'is_innet'和'is_acct'。该子查询使用了'WHERE'子句进行筛选,条件为'month_id'为'${v_month}',并且'is_innet'为'1'或'is_acct'为'1'。最后使用'GROUP BY'子句对'cbss_user_id'、'is_innet'和'is_acct'进行分组。
-
子查询'c'和子查询'a'通过'LEFT JOIN'进行连接,连接条件为'c.user_id = a.user_id'。
-
第三个子查询(标记为'b')从表'dwd.DWD_M_ACC_CB_F_BILL_AFTER'中选择字段'user_id'、'month_id'和'total_fee'。该子查询使用了'WHERE'子句进行筛选,条件为'month_id'在'${v_first_month}'和'${v_month}'之间。最后使用'GROUP BY'子句对'user_id'和'month_id'进行分组。
-
子查询'c'和子查询'b'通过'LEFT JOIN'进行连接,连接条件为'b.user_id = c.user_id'。
-
最后使用'GROUP BY'子句对'c.prov_id'和'c.pro_type'进行分组。
总结起来,这段代码的作用是从两个子查询和一个表中获取数据,根据一定的条件进行筛选和计算,然后将结果按照省份和产品类型进行分组,并将结果插入到指定的表中。
原文地址: https://www.cveoy.top/t/topic/fBim 著作权归作者所有。请勿转载和采集!