2008-11-25 16 views
92

Digamos que tengo una tabla como la siguiente:¿Cómo obtengo el MIN() de dos campos en Postgres?

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

me gustaría seleccionar el mínimo de puntuación_a y puntuación_b. En otras palabras, algo así como:

SELECT name, MIN(score_a, score_b) 
FROM table 

Los resultados, por supuesto, sería:

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

Sin embargo, cuando intento esto en Postgres, consigo, "sin función coincide con el nombre dado y tipos de argumentos. Puede que necesite agregar moldes de tipo explícitos ". MAX() y MIN() parecen funcionar en filas en lugar de columnas.

¿Es posible hacer lo que estoy intentando?

Respuesta

148

LEAST (a, b):

Los GREATEST y LEAST funciones seleccione el valor mayor o menor de una lista de cualquier número de expresiones. Todas las expresiones deben ser convertibles a un tipo de datos común, que será el tipo de resultado (ver Section 10.5 para más detalles). Los valores NULL en la lista son ignorados. El resultado será NULL solo si todas las expresiones se evalúan como NULL.

Tenga en cuenta que GREATEST y LEAST no están en el estándar SQL, pero son una extensión común. Algunas otras bases de datos hacen que los devuelven NULL si cualquier argumento es NULL, en lugar de sólo cuando todos son NULL ...

+10

Para personas como yo, que también necesitarán 'MAX()' de dos valores, es 'GREATEST (a, b)' :) – vektor

-4

usted puede obtener la respuesta al poner esos datos en una columna de la siguiente manera:

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

Aquí, estamos poniendo el valor mínimo entre 012 y e imprima el mismo almacenando ese valor en una columna llamada minimum_score.

Cuestiones relacionadas