现在做一个项目,有一个工单表,需要统计。表名sheet,包含以下列
SHEET_ID 工单号
PHE_TYPE_ID 工单类型
AREA_CODE 地区代码
OVER_DATE 结束日期
CREATE_OPERATOR 创建者
OVER_OPERATOR 结束者
DEAL_FLAG 处理标识,有4种,分别为1、2、3、4
SEND_FLAG 派单标识,有5种,分别为0、1、2、3、4
CREATE_DATE 生成日期
EXPERT_OPERATOR 专家级操作人
现在需要统计4种处理标识和5种派单标识的工单,在某段时间内共产生多少,请问该如何编写才能更有效率的执行。每日产生数据6-8W条,可能会按季度统计,整个表一年的数据量大概在3000W左右。谢谢。
第一次发帖,问题描述的可能不够清楚,表示歉意。
SHEET_ID 工单号
PHE_TYPE_ID 工单类型
AREA_CODE 地区代码
OVER_DATE 结束日期
CREATE_OPERATOR 创建者
OVER_OPERATOR 结束者
DEAL_FLAG 处理标识,有4种,分别为1、2、3、4
SEND_FLAG 派单标识,有5种,分别为0、1、2、3、4
CREATE_DATE 生成日期
EXPERT_OPERATOR 专家级操作人
现在需要统计4种处理标识和5种派单标识的工单,在某段时间内共产生多少,请问该如何编写才能更有效率的执行。每日产生数据6-8W条,可能会按季度统计,整个表一年的数据量大概在3000W左右。谢谢。
第一次发帖,问题描述的可能不够清楚,表示歉意。
select
phe_type_id,
(select count(*) from sheet where phe_type_id = s.phe_type_id ) as 所有工单,
(select count(*) from sheet where phe_type_id = s.phe_type_id and deal_flag in(1,3)) as 成功,
(select count(*) from sheet where phe_type_id = s.phe_type_id and deal_flag='2') as 失败,
(select count(*) from sheet where phe_type_id = s.phe_type_id and send_flag = '1') as 派单至专家席,
(select count(*) from sheet where phe_type_id = s.phe_type_id and send_flag = '2') as 派单到外系统,
(select count(*) from sheet where phe_type_id = s.phe_type_id and send_flag = 'a' and deal_flag in (1,3)) as 专家席处理成功
from sheet s
where CREATE_DATE between a and b
group by phe_type_id这样子写的话,如果统计指标有15个的话,我对时间段内的每个数据都要运行15个查询,如果统计3个月的数据量的话,效率应该低的不行了吧?
同时加上DECODE进行区分
select phe_type_id,
sum(cnt) as 所有工单,
sum(case when deal_flag =1 and deal_flag =3 then num else 0 end) as 成功,
--.....以此类推
from sheet s,
(select phe_type_id,deal_flag,send_flag,count(*) as cnt from sheet group by phe_type_id,deal_flag ) sd
where sd.phe_type_id = s.phe_type_id
sum(cnt) as 所有工单,
sum(case when deal_flag =1 and deal_flag =3 then num else 0 end) as 成功,
--.....以此类推
from sheet s,
(select phe_type_id,deal_flag,send_flag,count(*) as cnt from sheet group by phe_type_id,deal_flag ) sd
where sd.phe_type_id = s.phe_type_id
group by phe_type_id忘记加GROUP BY了,嘿嘿
-- 这样是否好点???
select phe_type_id,
count(1) 所有工单,
sum(case when deal_flag in (1,3) then 1 else 0 end) 成功,
sum(decode(deal_flag,2,1,0)) 失败,
sum(decode(send_flag,1,1,0)) 派单至专家席,
sum(decode(send_flag,2,1,0)) 派单到外系统,
sum(case when send_flag=1 and deal_flag in (1,3) then 1 else 0 end) 专家席处理成功
from sheet s
where CREATE_DATE between a and b
group by phe_type_id
select phe_type_id,
count(1) as 所有工单,
count(case when deal_flag in(1,3) then 1 end) as 成功,
count(case when deal_flag='2' then 1 end) as 失败,
count(case when send_flag = '1' then 1 end) as 派单至专家席,
count(case when send_flag = '2' then 1 end) as 派单到外系统,
count(case when send_flag = 'a' and deal_flag in (1,3) then 1 end) as 专家席处理成功
from sheet
where CREATE_DATE between a and b
group by phe_type_id