DB2, получение средних значений с помощью оператора case в

В DB2 я пытаюсь получить отдельные поля в GROUP BY, а также получить среднее значение определенных значений в каждой строке.

Я думаю, проблема в том, что я пытаюсь использовать CASE в предложении AVG.

 SELECT
    number,
    customer,
    group,
    groupDetail,
    category,
    detail,
    detailName,
    avg(countOfSales),
    avg(annuals),
    avg(case when trajectory is null then 0 else trajectory end as trajectory),
    avg(annualsLocation),
    avg(case when trajLocation is null then 0 else trajLocation end as trajLocation),
    avg(annualsWhole),
    avg(case when trajWhole is null then 0 else trajWhole end as trajWhole)
FROM salesReporting
WHERE customer = 123
group by number,customer,group,groupDetail,category,detail,detailName
ORDER BY customer,groupDetail,category,detail ASC

В нем говорится, что «AS» не ожидается в качестве токена, и я думаю, что это в моем первом CASE в AVG.

Итак, с:

customer | group | groupDetail | category | detail | detailName | countOfSales | annuals | trajectory | annualsLocation | trajLocation | annualsWhole | trajWhole
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
123         1         Atl.          Sls       New       NewLoc      12345           2948     124.84       8372                246.08        8372         28.84
123         1         Atl.          Sls       New       NewLoc      12345           2345     164.84       4839                234.08        4839         26.63
123         1         Atl.          Sls       New       NewLoc      12345           6523     224.84       2345                654.08        2345         29.85
123         1         Atl.          Sls       New       NewLoc      12345           3456     134.84       5434                152.08        5434         25.34
123         1         Atl.          Sls       New       NewLoc      12345           3426     124.84       6234                245.08        6234         28.84

я бы хотел

customer | group | groupDetail | category | detail | detailName | countOfSales | annuals | trajectory | annualsLocation | trajLocation | annualsWhole | trajWhole
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
123         1         Atl.          Sls       New       NewLoc      /*and all of these columns to be the respective averages of the matching columns above*/

Как я могу добиться этого в DB2?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
21
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это проблема синтаксиса, псевдоним "траектория должен быть вне скобки avg.

Например:

avg(case when trajectory is null then 0 else trajectory end) as trajectory

Ах, хороший улов! Не могу поверить, что я это пропустил, спасибо ... Вы также знаете, почему при использовании round (, 2) фактическое число округляется до двух цифр после десятичной дроби, но по-прежнему остается след нулей?

Geoff_S 08.01.2019 05:43

Я предполагаю, что это связано с клиентской программой / приложением, которое отображает вывод запроса выбора. Я бы попытался явно выдать вывод. Например: скажем, как десятичное, чтобы увидеть, помогает ли это ===> cast (round (<col>, 2) as decimal)

George Joseph 08.01.2019 05:49

Тип результата зависит от типа ввода. См. Справочную страницу ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/… "Тип данных и атрибут длины результата такие же, как тип данных и атрибут длины первого аргумента, за исключением того, что точность увеличивается на единицу, если числовое выражение1 DECIMAL, а точность равна менее 31 "

Paul Vernon 08.01.2019 20:20

Эта логика гораздо проще записать с использованием coalesce():

avg(coalesce(trajectory, 0)) as trajectory,
. . . 

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