如何获得Postgres中两个字段的MIN()?

比方说,我有一个这样的表格:

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

我想selectscore_a和score_b的最小值。 换句话说,就像:

 SELECT name, MIN(score_a, score_b) FROM table 

结果当然是:

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

但是,当我在Postgres中尝试这个时,我得到:“没有函数匹配给定的名称和参数types,您可能需要添加明确的types转换。 MAX()和MIN()似乎跨行而不是列。

是否有可能做我想要的?

至less (a,b):

GREATESTLEAST函数从任意数量的expression式列表中select最大或最小值。 expression式必须全部转换为通用的数据types,这将是结果的types(详见10.5节 )。 列表中的NULL值将被忽略。 仅当所有expression式求值为NULL时,结果才为NULL。

请注意, GREATESTLEAST不在SQL标准中,但是是一个常见的扩展。 其他一些数据库使得它们返回NULL,如果任何参数是NULL,而不是只有当所有的都是NULL时。

以下是PostgreSQL中LEAST()函数文档的链接:

http://www.postgresql.org/docs/current/static/functions-conditional.html#AEN15582

你可以通过把这些数据放入这样一个列来得到答案:

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

在这里,我们将score_ascore_b的最小值放在score_a ,并将其存储在名为minimum_score的列中。