问题描述
月份 区县 客户等级 拍照等级 实际离网数 总记录数 离网率 (实际离网/总记录数)
200812 安义县 省拍照 3
200812 安义县 省拍照0803 2
200812 安义县 南昌拍照客户 28
200812 安义县 银卡 2
200812 昌北区 省拍照 29
200812 昌北区 省拍照0803 10
200812 昌北区 南昌拍照客户 98
200812 昌北区 银卡 2
200812 东湖区 省拍照 48
200812 东湖区 省拍照0803 29
我有一个基表,都是关于客户的区县,客户等级,拍照等级 等的记录,我现在要统计上面这些。可是我后面的总记录数不知道怎么统计。这是我的sql:
SELECT TO_CHAR(SYSDATE, 'yyyymm') 月份,
C.COUNTY_NAME 区县,
D.CLASS_NAME 客户等级,
E.PAIZHAO_NAME 拍照等级,
COUNT(*) 实际离网
FROM ALL_CM_USER B,
MB_NC_MAINCUST A,
JH_SV_COUNTY C,
MB_SV_CLASS D,
MB_SV_PAIZHAO_CLASS E
WHERE B.SERV_ID = A.SERV_ID --
AND B.USER_STS <> 1 --这是要在总数统计的时候要去掉的条件
AND A.QZ_CLASS = E.PAIZHAO_ID(+)
AND A.AREA = C.COUNTY_ID(+)
AND A.CUST_CLASS = D.CUST_CLASS(+)
GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME
其实我的问题很明白,简单说就是我先在一些条件下统计出记录数(实际离网数), 然后去掉某个条件,再统计出总记录数,要在一条sql里实现。废话太多了,希望大家帮忙
月份 区县 客户等级 拍照等级 实际离网数 总记录数 离网率 (实际离网/总记录数)
200812 安义县 省拍照 3
200812 安义县 省拍照0803 2
200812 安义县 南昌拍照客户 28
200812 安义县 银卡 2
200812 昌北区 省拍照 29
200812 昌北区 省拍照0803 10
200812 昌北区 南昌拍照客户 98
200812 昌北区 银卡 2
200812 东湖区 省拍照 48
200812 东湖区 省拍照0803 29
我有一个基表,都是关于客户的区县,客户等级,拍照等级 等的记录,我现在要统计上面这些。可是我后面的总记录数不知道怎么统计。这是我的sql:
SELECT TO_CHAR(SYSDATE, 'yyyymm') 月份,
C.COUNTY_NAME 区县,
D.CLASS_NAME 客户等级,
E.PAIZHAO_NAME 拍照等级,
COUNT(*) 实际离网
FROM ALL_CM_USER B,
MB_NC_MAINCUST A,
JH_SV_COUNTY C,
MB_SV_CLASS D,
MB_SV_PAIZHAO_CLASS E
WHERE B.SERV_ID = A.SERV_ID --
AND B.USER_STS <> 1 --这是要在总数统计的时候要去掉的条件
AND A.QZ_CLASS = E.PAIZHAO_ID(+)
AND A.AREA = C.COUNTY_ID(+)
AND A.CUST_CLASS = D.CUST_CLASS(+)
GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME
其实我的问题很明白,简单说就是我先在一些条件下统计出记录数(实际离网数), 然后去掉某个条件,再统计出总记录数,要在一条sql里实现。废话太多了,希望大家帮忙
C.COUNTY_NAME 区县,
D.CLASS_NAME 客户等级,
E.PAIZHAO_NAME 拍照等级,
COUNT(*) 总记录数,
SUM(DECODE(B.USER_STS,1,0,1)) 实际离网数,
SUM(DECODE(B.USER_STS,1,0,1))/COUNT(*) 离网率 -- 这里如果考虑精度的话,加上round函数。
FROM ALL_CM_USER B,
MB_NC_MAINCUST A,
JH_SV_COUNTY C,
MB_SV_CLASS D,
MB_SV_PAIZHAO_CLASS E
WHERE B.SERV_ID = A.SERV_ID --
--AND B.USER_STS <> 1 --这是要在总数统计的时候要去掉的条件
AND A.QZ_CLASS = E.PAIZHAO_ID(+)
AND A.AREA = C.COUNTY_ID(+)
AND A.CUST_CLASS = D.CUST_CLASS(+)
GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME
select TO_CHAR(SYSDATE, 'yyyymm') 月份,
b.COUNTY_NAME 区县,
b.CLASS_NAME 客户等级,
b.PAIZHAO_NAME 拍照等级,
nvl(a.real_cnt,0) 实际离网数,
a.tot_cnt 总记录数 ,
round(decode(a.tot_cnt,0,0,nvl(a.real_cnt,0) / a.tot_cnt),2) 离网率
from
(SELECT C.COUNTY_NAME ,
D.CLASS_NAME ,
E.PAIZHAO_NAME ,
SUM(DECODE(B.USER_STS,1,0,1)) real_cnt,
FROM ALL_CM_USER B,
MB_NC_MAINCUST A,
JH_SV_COUNTY C,
MB_SV_CLASS D,
MB_SV_PAIZHAO_CLASS E
WHERE B.SERV_ID = A.SERV_ID
AND B.USER_STS <> 1
AND A.QZ_CLASS = E.PAIZHAO_ID(+)
AND A.AREA = C.COUNTY_ID(+)
AND A.CUST_CLASS = D.CUST_CLASS(+)
GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME) a,
(SELECT C.COUNTY_NAME ,
D.CLASS_NAME ,
E.PAIZHAO_NAME ,
SUM(DECODE(B.USER_STS,1,0,1)) tot_cnt,
FROM ALL_CM_USER B,
MB_NC_MAINCUST A,
JH_SV_COUNTY C,
MB_SV_CLASS D,
MB_SV_PAIZHAO_CLASS E
WHERE B.SERV_ID = A.SERV_ID
AND A.QZ_CLASS = E.PAIZHAO_ID(+)
AND A.AREA = C.COUNTY_ID(+)
AND A.CUST_CLASS = D.CUST_CLASS(+)
GROUP BY C.COUNTY_NAME, D.CLASS_NAME, E.PAIZHAO_NAME) b
where b.county_name = a.county_name(+)
and b.class_name = a.class_name(+)
and b.paizhao_name = a.paizhao_name(+)