¿Cómo obtengo el MIN () de dos campos en Postgres?


140

Digamos que tengo una mesa como esta:

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

Me gustaría seleccionar el mínimo de score_a y score_b. En otras palabras, algo como:

SELECT name, MIN(score_a, score_b)
FROM table

Los resultados, por supuesto, serían:

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

Sin embargo, cuando pruebo esto en Postgres, me sale: "Ninguna función coincide con el nombre dado y los tipos de argumento. Es posible que deba agregar conversiones de tipos explícitos". MAX () y MIN () parecen funcionar en filas en lugar de columnas.

¿Es posible hacer lo que intento?

Respuestas:


247

MENOS (a, b):

Las funciones GREATESTy LEASTseleccionan el valor más grande o más pequeño 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 del resultado (consulte la Sección 10.5 para más detalles). Se ignoran los valores NULL en la lista. El resultado será NULL solo si todas las expresiones se evalúan como NULL.

Tenga en cuenta que GREATESTy LEASTno están en el estándar SQL, pero son una extensión común. Algunas otras bases de datos hacen que devuelvan NULL si algún argumento es NULL, en lugar de solo cuando todos son NULL ...


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


-16

Puede obtener la respuesta colocando esos datos en una columna como esta:

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

Aquí, estamos poniendo el valor mínimo entre score_ae score_bimprimiendo el mismo almacenando ese valor en una columna llamada minimum_score.


Solo min(expression)existe. Definición del documento: el valor mínimo de expresión en todos los valores de entrada con 'expresión' es cualquier tipo numérico, cadena, fecha / hora, red o enumeración, o matrices de estos tipos
charlesdg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.