Сокращение дубликатов SQL, деление на количество результатов подзапроса

Ребята!

Я столкнулся с проблемой здесь.

Я работаю с некоторыми записями, которые имеют много дубликатов. Каждая запись имеет три ключа: personID, CostCtr (центр затрат) и рабочее местоположение. Набор этих повторяющихся записей может выглядеть следующим образом:

PersonID    Cost Ctr    DaysInLocation  DaysInMonth
1111        256         3               28
1111        256         0               28
1111        256         3               28
1111        243         15              15
1111        243         15              15
1111        243         0               15

Я хочу создать результат, который будет складывать все "daysInLocation" и делить его на количество "daysInLocation", которые не равны 0, и добавлять все daysInMonth, деленные на количество daysInMonth.

Результат будет выглядеть примерно так:

PersonID    CostCtr DaysInLocation  DaysInMonth
1111        256     3               28
1111        243     15              15

Я также смотрю, как разделить сумму (вещи)/ количество (подзапрос), где сумма (вещи) и количество (подзапрос) совместно используют один и тот же personID, CostCtr и другие ключи.

1 ответ

Это то, что вы хотите?

select personid, costctr
       sum(daysinlocation) / sum(case when daysinlocation <> 0 then 1 else 0
                                 end) as DaysInLocation,
       sum(DaysInMonth) / count(DaysInMonth)
from table t
group by personid, costctr;

DaysInMonth Выражение также может быть avg(DaysInMonth) as DaysInMonth,

Другие вопросы по тегам