我有这样的查询:
select nvl(o.org_id, o.org_name) as organization,
count(distinct c.client_id) as clients,
count(distinct (case when c.delay_days_max>3 then c.client_id end)) as delay_above_3d,
count(distinct c.contact_phone) as contacts,
case when sum(c.max_debt) > 0 then round(sum(case when c.delay_days>3 then c.new_debt else 0 end) / sum(c.max_debt)*100, 2) as delay_rate_above_3d
from organizations o
left join(select cl.client_id, cl.delay_days_max, cl.contact_phone,
r.max_debt, r.delay_days, r.new_debt
from clients_all cl
join reports_all r
on cl.cl.contact_phone = r.contact_phone) c
on c.client_id = o.client_id
group by o.org_id, o.org_name;
实际上,我尝试创建表c_table
来保留上述c
子查询的结果。我想保存已经分组的数据,按client_id
分组,但是当我尝试这样做时:
create table c_table as
select cl.client_id,
count(cl.delay_days_max) as delay_days_max,
count(cl.contact_phone) as cl.contact_phone,
sum(r.max_debt) as max_debt,
sum(r.delay_days) as delay_days,
max(r.new_debt) as new_debt
from clients_all cl
join reports_all r
on cl.cl.contact_phone = r.contact_phone
group by cl.client_id;
我得到错误的列计算结果。是否有解决方案可将c_table
上的有效数据插入client_id
中?非常感谢您提供任何信息。
答案 0 :(得分:0)
也许您的问题出在JOIN
与聚合函数之间的交互作用上。
尝试以下方法:
create table c_table as
select cl.client_id,
count(cl.delay_days_max) as delay_days_max,
count(cl.contact_phone) as contact_phone,
max_debt,
delay_days,
new_debt
from clients_all cl
join (
select contact_phone,
sum(r.max_debt) as max_debt,
sum(r.delay_days) as delay_days,
max(r.new_debt) as new_debtrep
from reports_all
group by contact_phone) r
on cl.contact_phone = r.contact_phone
group by cl.client_id;