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

时间:2008-11-25 21:44:57

标签: sql postgresql 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()似乎可以在而不是列中工作。

是否有可能做我正在尝试的事情?

3 个答案:

答案 0 :(得分:189)

LEAST(a,b):

  

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

     

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

答案 1 :(得分:23)

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

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

答案 2 :(得分:-11)

您可以通过将这些数据放入如下列中来获得答案:

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

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