Как получить MIN() двух полей в Postgres?

Скажем, у меня есть таблица вроде этого:

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() отображаются как строки, а не столбцы.

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

Ответ 1

Меньше всего(a, b):

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

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

Ответ 3

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

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

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