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

假设我有一个这样的表:

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

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

SELECT name, MIN(score_a, score_b)
FROM table

当然,结果将是:

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

然而,当我在Postgres中尝试这个时,我得到,“没有函数匹配给定的名称和参数类型。您可能需要添加显式类型强制转换。”MAX()和MIN()似乎在而不是列。上工作

有可能做到我正在尝试的事情吗?

102362 次浏览

至少 (a, b):

GREATESTLEAST函数从任意数量的表达式列表中选择最大或最小的值。表达式必须全部转换为公共数据类型,这将是结果的类型(详细信息请参阅10.5节)。列表中的NULL值将被忽略。只有当所有表达式的值为NULL时,结果才为NULL。

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

你可以通过将数据放入这样的一列来得到答案:

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

在这里,我们将最小值放在score_ascore_b之间,并通过将该值存储在名为minimum_score的列中打印相同的值。