Как получить MIN () из двух полей в Postgres? - PullRequest
109 голосов
/ 26 ноября 2008

Допустим, у меня есть такая таблица:

name | score_a | score_b
-----+---------+--------
 Joe |   100   |   24
 Sam |    96   |  438
 Bob |    76   |  101
 ... |   ...   |  ...

Я бы хотел выбрать минимум для Score_a и Score_b. Другими словами, что-то вроде:

SELECT name, MIN(score_a, score_b)
FROM table

Результаты, конечно, будут:

name | min
-----+-----
 Joe |  24
 Sam |  96
 Bob |  76
 ... | ...

Однако, когда я пытаюсь сделать это в Postgres, я получаю: «Ни одна функция не соответствует заданному имени и типу аргумента. Возможно, вам придется добавить явное приведение типов». MAX () и MIN () работают для строк , а не столбцов.

Можно ли сделать то, что я пытаюсь?

Ответы [ 3 ]

191 голосов
/ 26 ноября 2008

МЕНЬШЕ (а, б):

Функции GREATEST и LEAST выбирают наибольшее или наименьшее значение из списка любого числа выражений. Все выражения должны быть преобразованы в общий тип данных, который будет типом результата (подробности см. Раздел 10.5 ). Значения NULL в списке игнорируются. Результат будет равен NULL, только если все выражения будут иметь значение NULL.

Обратите внимание, что GREATEST и LEAST не входят в стандарт SQL, но являются распространенным расширением. Некоторые другие базы данных заставляют их возвращать NULL, если любой аргумент равен NULL, а не только тогда, когда все имеют значение NULL ...

23 голосов
/ 26 ноября 2008

Вот ссылка на документы для функции LEAST() в PostgreSQL:

http://www.postgresql.org/docs/current/static/functions-conditional.html#AEN15582

0 голосов
/ 23 апреля 2017

Вы можете получить ответ, поместив эти данные в столбец, подобный следующему:

SELECT name, MIN(score_a, score_b) as minimum_score
FROM table

Здесь мы помещаем минимальное значение между score_a и score_b и печатаем его, сохраняя это значение в столбце с именем minimum_score.

...