Переписывающий запрос с агрегатными функциями - PullRequest
0 голосов
/ 26 декабря 2018

У меня такой запрос:

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?Большое спасибо за любую информацию.

1 Ответ

0 голосов
/ 27 декабря 2018

Возможно, ваша проблема связана с взаимодействием между 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...