Condicionales

GREATEST

Devuelve el mayor de una lista de valores.

Sintaxis

GREATEST(<valor1>, <valor2>, …)

Compara varios valores de una misma fila y devuelve el mayor. Su contraparte es LEAST, que devuelve el menor. No la confundas con MAX: esa busca entre muchas filas, mientras que GREATEST mira valores que están uno al lado del otro. Útil para poner un mínimo a un número: «como mínimo».

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

orders

idcreated_atamount
12026-07-03 10:15:00120.50
22026-07-28 18:40:0080.25
32026-08-09 09:05:00199.99
42026-08-21 14:30:0045.00
52026-09-02 11:00:0064.75

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

El mayor de la lista
SELECT GREATEST(3, 7, 5) AS biggest;
biggest
7
Un bonus de al menos 250
SELECT name, bonus,
GREATEST(bonus, 250) AS bonus_at_least_250
FROM employees;
namebonusbonus_at_least_250
Emma300300
LiamNULL250
Olivia150250
NoahNULL250
Sophia200250

Liam y Noah no tienen bonus y, aun así, el resultado no es NULL: en PostgreSQL, GREATEST ignora NULL.

No antes del 1 de agosto
SELECT id, created_at,
GREATEST(created_at, TIMESTAMP '2026-08-01') AS counted_from
FROM orders;
idcreated_atcounted_from
12026-07-03 10:15:002026-08-01 00:00:00
22026-07-28 18:40:002026-08-01 00:00:00
32026-08-09 09:05:002026-08-09 09:05:00
42026-08-21 14:30:002026-08-21 14:30:00
52026-09-02 11:00:002026-09-02 11:00:00

No solo funciona con números: en las fechas, la «mayor» es la más tardía. Los pedidos de julio cuentan desde el 1 de agosto; el resto, desde su propia fecha.

Ten en cuenta

PostgreSQL ignora NULL: GREATEST(5, NULL) da 5, y solo cuando todos son NULL el resultado es NULL. En MySQL u Oracle, cualquier NULL daría NULL.

Los valores deben ser de tipos compatibles: GREATEST(5, 'abc') da el error invalid input syntax for type integer.

El mayor valor entre las filas de una tabla lo busca MAX. GREATEST(salary) con un solo argumento simplemente devuelve el salary de cada fila.

Funciones relacionadas