Арифметика c Операции с агрегатной функцией - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть таблица foo

  x   |  y  | value 
------+-----+-------
  274 | 617 |     1
   91 | 374 |    10
  996 | 716 |    40
  121 | 442 |     5

Я хочу добавить вычисляемый столбец cal как (value - min(value))/(max(value) - min(value))

Вывод

  x   |  y  | value | cal
------+-----+-------+-----
  274 | 617 |     1 | 0
   91 | 374 |    10 | 0.23
  996 | 716 |    40 | 1
  121 | 442 |     5 | 0.10

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете использовать оконные функции:

select x, y, value, (value - min(value) over ()) / (max(value) over () - min(value) over ()) from t;

Если value является целым числом, вам нужно быть осторожным с целочисленной арифметикой c:

select x, y, value, (value - min(value) over ()) * 1.0 / (max(value) over () - min(value) over ()) from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...