Использование различных групповых операторов в DB2 - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть успешный запрос, который возвращает некоторые данные для пользователя и категории (запрос сгруппирован по категории и пользователю) который в основном показывает прогнозы для каждой категории на пользователя

select 
    user, 
    category, 
    sum(CatProjection) as CatProjection, 
    sum(CatProjection)/52 as WeekCatProjection
from projections
where user = 123
group by user, category

И это возвращает то, что я хочу / ожидаю:

USER  |   CATEGORY      |   CatProjection |  WeekCatProjection   
----------------------------------------------------------------
123   |   CategoryA     |   755000        |   14519              
123   |   CategoryB     |   390000        |   7500              
123   |   CategoryC     |   281250        |   5408              

Проблема в том, что эти результаты сгруппированы по пользователю и категории, и теперь я хочу добавить два столбца, которые зависят от суммы CatProjection для этого пользователя, но не сгруппированы по категориям.

Итак, для нового значения TotalCatProjection я хочу добавить все значения CatProjection для этого пользователя. Затем я хочу использовать CatPercentage для деления WeekCatProjection на TotalCatProjection.

Так что теперь я ожидаю этих результатов:

USER  |   CATEGORY      |   CatProjection |  WeekCatProjection   |  TotalCatProjection |  CatPercentage 
--------------------------------------------------------------------------------------------------------
123   |   CategoryA     |   755000        |   14519              |  27427              |    52.94
123   |   CategoryB     |   390000        |   7500               |  27427              |    27.35
123   |   CategoryC     |   281250        |   5408               |  27427              |    19.72

Как я могу получить эти 2 новых столбца, которые основаны только на USER, когда мой основной запрос сгруппирован по категории AND И пользователю?

1 Ответ

0 голосов
/ 09 ноября 2018

Поскольку оконные функции представлены в DB2 7.3 , вы должны использовать решение подзапроса:

select user, 
    category, 
    CatProjection, 
    WeekCatProjection,
    TotalCatProjection,
    100 * WeekCatProjection / TotalCatProjection
from
(
    select 
        user, 
        category, 
        sum(CatProjection) as CatProjection, 
        sum(CatProjection)/52 as WeekCatProjection,
        ( 
           select sum(CatProjection) 
           from projections p2
           where p1.user = p2.user
        ) as TotalCatProjection
    from projections p1
    group by user, category 
) t

Я избегаю условия where user = XYZ, потому что тогда GROUP BY user не имеет смысла, однако вы можете вставить его туда, если хотите.

...