Как я могу реализовать `set field = max (1, x)` в SQL? - PullRequest
1 голос
/ 24 августа 2011

Я пытаюсь обновить поле в серии записей с помощью выражения, которое будет оцениваться как целое число, которое может быть отрицательным. Я хочу, чтобы нижняя граница столбца была 1; Любые строки, для которых выражение оценивается менее чем в 1, должны иметь свое поле, установленное в 1. Это может быть лучше всего выражено следующей парой псевдо-SQL-операторов:

update posts set field = [expensive expression];
update posts set field = 1 where field < 1;

Как я могу реализовать это в одном операторе SQL update? Есть ли какой-нибудь эквивалент max(a, b) в PostgreSQL, к которому я могу передать max([expression], 1)?

Ответы [ 3 ]

6 голосов
/ 24 августа 2011

Используйте функцию GREATEST.

Или более общий подход к условиям:

SELECT 
     CASE WHEN condition 
     THEN valueForTrue
     ELSE valueForFalse
     END
FROM ...
2 голосов
/ 24 августа 2011

Да, используйте GREATEST([expensive expr], 1)

1 голос
/ 24 августа 2011

Использование GREATEST(1, [your expression]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...