Упрощенный пример:
В куст у меня есть таблица t
с двумя столбцами:
Name, Value
Bob, 2
Betty, 4
Robb, 3
Я хочу сделать case when
, что использует сумму столбца Значение:
Select
Name
, CASE
When value>0.5*sum(value) over () THEN ‘0’
When value>0.9*sum(value) over () THEN ‘1’
ELSE ‘2’
END as var
From table
Мне не нравится тот факт, что sum(value) over ()
вычисляется дважды. Есть ли способ вычислить это только один раз. Добавлен поворот, я хочу сделать это в одном запросе, поэтому без объявления пользовательских переменных .
Я думал о скалярных запросах:
With total as
(Select sum(value) from table)
Select
Name
, CASE
When value>0.5*(select * from total) THEN ‘0’
When value>0.9*(select * from total)THEN ‘1’
ELSE ‘2’
END as var
From table;
Но это не работает.
TLDR : есть ли способ упростить первый запрос без пользовательских переменных?