Наборы группировки SQL и сводка новостей

Я пытаюсь вычислить разницу между определенной суммой значений и одной и той же суммой, используя определенные правила округления (столбцы 5 и 6):


select
    A,
    B,
    C,
    sum(D),
    sum(D)/300,
    case when sum(D)/300 < 1.5 then 0 else round(sum(D/300), 0) end

from table

group by grouping sets ((A,B,C), ())

SQL работает, но последняя строка неверна. Итоговые значения в последней строке кажутся правильными для столбцов 4 и 5, но в столбце 6 - это не сумма округленных значений столбца, а округленная сумма суммы столбца 5...

Что я делаю неправильно? (Цель: сравнить итоги столбцов 5 и 6)

Любая помощь приветствуется!

РЕДАКТИРОВАТЬ:

результат сейчас примерно такой (только столбцы 5 и 6):

1,2 0
1,5 2
3,1 3

5,8 6

Сумма второго столбца должна сказать 5 в этом примере, но это говорит 6, используя необоснованные значения...

1 ответ

Вам не хватает внешнего SUM:

select
    A,
    B,
    C,
    sum(D),
    sum(D)/300,
    SUM(case when sum(D)/300 < 1.5 then 0 else round(sum(D/300), 0) end) as result

from table

group by grouping sets ((A,B,C), ())
Другие вопросы по тегам