Как получить 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...
Ответ 2
Здесь ссылка на документы для функции LEAST()
в PostgreSQL:
http://www.postgresql.org/docs/current/static/functions-conditional.html#AEN15582
Ответ 3
Вы можете получить ответ, поместив эти данные в столбец следующим образом:
SELECT name, MIN(score_a, score_b) as minimum_score
FROM table
Здесь мы помещаем минимальное значение из score_a
и score_b
и печатаем то же самое, сохраняя это значение в столбце с именем minimum_score
.