我的表结构是area_no(地市),city_no(县区),tele_type(业务类型),brand(品牌),user_dinner(套餐),user_charge(收入)
我有很多的套餐,我想计算出收入最高的套餐占该维度所有套餐的收入的比例
比如说 aa地市 bb县区 cc业务类型 dd品牌 ff套餐占 aa地市 bb县区 cc业务类型 dd品牌所有套餐的收入的比例

解决方案 »

  1.   

    select sum(decode(user_dinner,'ff',user_charge,0))/sum(user_charge) from table
    where area_no='aa' and city_no='bb' 
    and tele_type='cc' and brand='dd' 
    decode函数
      

  2.   

    我说的收入最多的ff套餐也是从这个表里按收入算出来的,所以没有办法确定唯一的套餐ID是多少,要怎么办呢
      

  3.   

    select max(user_charge(收入))/sum(user_charge(收入)) from 表 group by area_no(地市),city_no(县区),tele_type(业务类型),brand(品牌),user_dinner(套餐);
      

  4.   

    Select area_no,city_no,tele_type,brand,user_dinner,user_charge/sum(user_charge) Over (PARTITION BY area_no,city_no,tele_type,brand) From Table
      

  5.   

    SELECT  .....
           decode(A.ALL_CHARGE_USER,0,0,A.CHARGE_USER / A.ALL_CHARGE_USER),
                  decode(A.ALL_TOTAL_FEE,0,0,A.TOTAL_FEE / A.ALL_TOTAL_FEE)
             FROM (
                   SELECT *
                    FROM (SELECT AREA_NO,
                                 CITY_NO,
                                 TELE_TYPE,
                                 BRAND,
                                 USER_DINNER,
                                 CHARGE_USER_COUNT CHARGE_USER,
                                 TOTAL_FEE TOTAL_FEE,
                                 SUM(CHARGE_USER_COUNT) OVER(PARTITION BY AREA_NO, CITY_NO, TELE_TYPE, BRAND) ALL_CHARGE_USER,
                                 SUM(TOTAL_FEE) OVER(PARTITION BY AREA_NO, CITY_NO, TELE_TYPE, BRAND) ALL_TOTAL_FEE,
                                 ROW_NUMBER() OVER(PARTITION BY AREA_NO, CITY_NO, TELE_TYPE, BRAND ORDER BY CHARGE_USER_COUNT DESC) ROWNO
                            FROM (SELECT AREA_NO,
                                         CITY_NO,
                                         TELE_TYPE,
                                         BRAND,
                                         USER_DINNER,
                                         SUM(CHARGE_USER_COUNT) CHARGE_USER_COUNT,
                                         SUM(TOTAL_FEE) TOTAL_FEE
                                    FROM DW.DW_F_INCO_M_CHARGE_MONTH
                                   WHERE ACCT_MONTH = V_ACCT_MONTH
                                     AND tele_type IN ('1','2')
                                     AND USER_DINNER IS NOT NULL
                                   GROUP BY AREA_NO, CITY_NO, TELE_TYPE, BRAND, USER_DINNER))
                   WHERE ROWNO = 1)