#postgresql #max
Вопрос:
У меня есть эта таблица в Postgres:
имя — варчар, вес и рост — int4. Мне нужно рассчитать соотношение веса к максимальному весу и роста к максимальной высоте для каждой записи.
Пока у меня есть только это:
select people.name, people.weight, people.height, people.weight/max(people.weight)
as weight_ratio, people.height/max(people.height) from people
но я получаю эту ошибку: column "people.name" must appear in the GROUP BY clause or be used in an aggregate function
Как мне устранить эту проблему?
Ответ №1:
Используйте MAX()
функцию окна:
SELECT name, weight, height,
weight / MAX(weight) OVER() weight_ratio,
height / MAX(height) OVER() height_ratio
FROM people
Если weight
и height
являются целыми числами, вы также должны умножить на 1.0
перед делением, потому что Postgresql выполняет целочисленное деление между целыми числами и усекает любую десятичную часть:
SELECT name, weight, height,
1.0 * weight / MAX(weight) OVER() weight_ratio,
1.0 * height / MAX(height) OVER() height_ratio
FROM people