号码集中度分析法的PL/SQL实现

  我自己用Oracle的PL/SQL来实现集中度分析。
  以下是相关的表与具体代码,供大家参考。
  
  (一)集中度分析相关的表
  /*  用户使用SP业务情况 */
  CREATE TABLE  DW_MW_ALL(
    月份                  CHAR(6)         NOT NULL,
    地区代码              CHAR(3)         NOT NULL,
    用户编号              NUMBER(10,0)    NOT NULL,
    手机号码              NUMBER(11,0)    NOT NULL,
    品牌类型              NUMBER(2,0)     NOT NULL,
    业务类型              VARCHAR2(10)    NOT NULL,
    SP代码                VARCHAR2(8)     NOT NULL,
    计费通信费            NUMBER(10,2)    NOT NULL,
    计次信息费            NUMBER(10,2)    NOT NULL,
    包月信息费            NUMBER(10,2)    NOT NULL,
    上行次数              NUMBER(10,0)    NOT NULL,
    下行次数              NUMBER(10,0)    NOT NULL,
    包月次数              NUMBER(10,0)    NOT NULL,
    上行计费次数          NUMBER(10,0)    NOT NULL,
    下行计费次数          NUMBER(10,0)    NOT NULL,
    流量                  NUMBER(12,0)    NOT NULL,
    备注                  VARCHAR2(20)   
    )
   
   /*  SP用户号码段分布汇总 */
  CREATE TABLE  DM_MW_FX_HLR(
    月份                  CHAR(6)         NOT NULL,
    业务类型              VARCHAR2(10)    NOT NULL,
    SP代码                VARCHAR2(10)    NOT NULL,
    地区代码              CHAR(3)         NOT NULL,
    号码段                CHAR(7)         NOT NULL,
    用户数                NUMBER(8,0)     NOT NULL,
    计费用户数            NUMBER(8,0)     NOT NULL,
    上行用户数            NUMBER(8,0)     NOT NULL,
    下行用户数            NUMBER(8,0)     NOT NULL,
    包月用户数            NUMBER(8,0)     NOT NULL,
    下行计费用户数        NUMBER(8,0)     NOT NULL,
    群发嫌疑用户数        NUMBER(8,0)     NOT NULL,
    上行次数              NUMBER(8,0)     NOT NULL,
    下行次数              NUMBER(8,0)     NOT NULL,
    包月次数              NUMBER(8,0)     NOT NULL,
    下行计费次数          NUMBER(8,0)     NOT NULL,
    计次信息费            NUMBER(10,2)    NOT NULL,
    包月信息费            NUMBER(10,2)    NOT NULL,
    总信息费              NUMBER(10,2)    NOT NULL,
    备注                  VARCHAR2(20)   
    )
  
  /* 分地区的群发汇总 */
  CREATE TABLE  STAT_MW_WG_QF1(
    月份                  CHAR(6)         NOT NULL,
    地区名称              VARCHAR2(6)     NOT NULL,
    业务类型              VARCHAR2(10)    NOT NULL,
    SP代码                VARCHAR2(10)    NOT NULL,
    SP名称                VARCHAR2(30)    NOT NULL,
    总用户数              NUMBER(8,0)     NOT NULL,
    群发用户数            NUMBER(8,0)     NOT NULL,
    群发指数500           NUMBER(8,0)     NOT NULL,
    群发指数200           NUMBER(8,0)     NOT NULL,
    群发指数100           NUMBER(8,0)     NOT NULL,
    群发号段数500         NUMBER(6,0)     NOT NULL,
    群发号段数200         NUMBER(6,0)     NOT NULL,
    群发号段数100         NUMBER(6,0)     NOT NULL,
    单号段最大下行数      NUMBER(8,0)     NOT NULL,
    上行用户数            NUMBER(8,0)     NOT NULL,
    下行用户数            NUMBER(8,0)     NOT NULL,
    包月用户数            NUMBER(8,0)     NOT NULL,
    下行计费用户数        NUMBER(8,0)     NOT NULL,
    上行次数              NUMBER(8,0)     NOT NULL,
    下行次数              NUMBER(8,0)     NOT NULL,
    包月次数              NUMBER(8,0)     NOT NULL,
    下行计费次数          NUMBER(8,0)     NOT NULL,
    计次信息费            NUMBER(10,2)    NOT NULL,
    包月信息费            NUMBER(10,2)    NOT NULL,
    总信息费              NUMBER(10,2)    NOT NULL,
    备注                  VARCHAR2(20)   
    )
  /* 不分地区的群发汇总 */
  CREATE TABLE  STAT_MW_WG_QF2(
    月份                  CHAR(6)         NOT NULL,
    业务类型              VARCHAR2(10)    NOT NULL,
    SP代码                VARCHAR2(6)     NOT NULL,
    SP名称                VARCHAR2(30)    NOT NULL,
    总用户数              NUMBER(8,0)     NOT NULL,
    群发用户数            NUMBER(8,0)     NOT NULL,
    群发指数500           NUMBER(8,0)     NOT NULL,
    群发指数200           NUMBER(8,0)     NOT NULL,
    群发指数100           NUMBER(8,0)     NOT NULL,
    群发号段数500         NUMBER(6,0)     NOT NULL,
    群发号段数200         NUMBER(6,0)     NOT NULL,
    群发号段数100         NUMBER(6,0)     NOT NULL,
    单号段最大下行数      NUMBER(8,0)     NOT NULL,
    上行用户数            NUMBER(8,0)     NOT NULL,
    下行用户数            NUMBER(8,0)     NOT NULL,
    包月用户数            NUMBER(8,0)     NOT NULL,
    下行计费用户数        NUMBER(8,0)     NOT NULL,
    上行次数              NUMBER(10,0)    NOT NULL,
    下行次数              NUMBER(10,0)    NOT NULL,
    包月次数              NUMBER(8,0)     NOT NULL,
    下行计费次数          NUMBER(8,0)     NOT NULL,
    计次信息费            NUMBER(10,2)    NOT NULL,
    包月信息费            NUMBER(10,2)    NOT NULL,
    总信息费              NUMBER(10,2)    NOT NULL,
    备注                  VARCHAR2(20)   
    )
   
  (二)代码1:汇总号段分布情况
  /* =========================================================== *
     GET_FX_HLR: SP用户的HLR分布
   * =========================================================== */
  PROCEDURE GET_FX_HLR(p_月份 CHAR) IS
  BEGIN 
   FOR v_地区代码 IN 570..580 LOOP
     INSERT INTO DM_MW_FX_HLR
       SELECT  p_月份,业务类型,SP代码,v_地区代码,SUBSTRB(手机号码,1,7),
              COUNT(1) 用户数,
              SUM(DECODE(计次信息费+包月信息费,0,0,1)) 计费用户数,
              SUM(DECODE(上行次数,0,0,1)) 上行用户数,
              SUM(DECODE(下行次数,0,0,1)) 下行用户数,
              SUM(DECODE(包月次数,0,0,1)) 包月用户数,
              SUM(DECODE(下行计费次数,0,0,1)) 下行计费用户数,
              SUM(DECODE(计次信息费+包月信息费,0,DECODE(上行次数,0,DECODE(下行次数,0,0,1,1,2,1,3,1,0),0),0)) 群发嫌疑用户数,
              SUM(上行次数),SUM(下行次数),SUM(包月次数),SUM(下行计费次数),SUM(计次信息费),SUM(包月信息费),SUM(计次信息费+包月信息费),NULL
        FROM DW_MW_ALL
        WHERE 月份 = p_月份 AND 地区代码 = TO_CHAR(v_地区代码)
        GROUP BY 业务类型,SP代码,SUBSTRB(手机号码,1,7)
        HAVING COUNT(1)>300;
    END LOOP; 
    COMMIT;
  END GET_FX_HLR; 
  
  (三)代码2:分析SP群发情况
  /* =========================================================== *
     GET_WG_QF1: SP端口群发汇总(分地区)
   * =========================================================== */
  PROCEDURE GET_WG_QF1(p_月份 CHAR) IS
  BEGIN
    INSERT INTO STAT_MW_WG_QF1
      SELECT  p_月份,地区代码,业务类型,SP代码,'*',
              SUM(用户数),SUM(群发嫌疑用户数),
              SUM(DECODE(SIGN(群发嫌疑用户数-500),1,群发嫌疑用户数,0))  群发指数500,
              SUM(DECODE(SIGN(群发嫌疑用户数-200),1,群发嫌疑用户数,0))  群发指数200,
              SUM(DECODE(SIGN(群发嫌疑用户数-100),1,群发嫌疑用户数,0))  群发指数100,           
              SUM(DECODE(SIGN(群发嫌疑用户数-500),1,1,0))  群发号段数500,
              SUM(DECODE(SIGN(群发嫌疑用户数-200),1,1,0))  群发号段数200,
              SUM(DECODE(SIGN(群发嫌疑用户数-100),1,1,0))  群发号段数100,
              MAX(下行用户数),SUM(上行用户数),SUM(下行用户数),SUM(包月用户数),SUM(下行计费用户数),SUM(上行次数),SUM(下行次数),
              SUM(包月次数),SUM(下行计费次数),SUM(计次信息费),SUM(包月信息费),SUM(计次信息费+包月信息费),NULL
      FROM DM_MW_FX_HLR@DW
      WHERE  月份 = p_月份 AND 业务类型 IN ('SMS','MMS')
      GROUP BY 地区代码,业务类型,SP代码;
    COMMIT;
  END GET_WG_QF1; 
  
  
  /* =========================================================== *
     GET_WG_QF2: SP端口群发汇总(全省)
   * =========================================================== */
  PROCEDURE GET_WG_QF2(p_月份 CHAR) IS
  BEGIN   
    INSERT INTO STAT_MW_WG_QF2
      SELECT p_月份,业务类型,SP代码,SP名称,
             SUM(总用户数) 总用户数,SUM(群发用户数) 群发用户数,SUM(群发指数500) 群发指数500,
             SUM(群发指数200) 群发指数200,SUM(群发指数100) 群发指数100,SUM(群发号段数500) 群发号段数500,
             SUM(群发号段数200) 群发号段数200,SUM(群发号段数100) 群发号段数100,
             MAX(单号段最大下行数) 单号段最大下行数,SUM(上行用户数) 上行用户数,
             SUM(下行用户数) 下行用户数,SUM(包月用户数) 包月用户数,SUM(下行计费用户数) 下行计费用户数,
             SUM(上行次数) 上行次数,SUM(下行次数) 下行次数,SUM(包月次数) 包月次数,
             SUM(下行计费次数) 下行计费次数,SUM(计次信息费) 计次信息费,SUM(包月信息费) 包月信息费,
             SUM(总信息费) 总信息费, NULL
      FROM STAT_MW_WG_QF1
      WHERE 月份=p_月份
      GROUP BY 业务类型,SP代码,SP名称
      HAVING SUM(群发用户数)>50000;
    COMMIT;
  END GET_WG_QF2; 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值