178

假设我有一张这样的桌子:

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() 似乎跨行而不是跨列工作

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

4

3 回答 3

328

最小(a,b):

GREATESTand函数从任意数量的LEAST表达式列表中选择最大值或最小值。表达式必须都可以转换为通用数据类型,这将是结果的类型(详见第 10.5 节)。列表中的 NULL 值被忽略。仅当所有表达式的计算结果为 NULL 时,结果才会为 NULL。

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

于 2008-11-25T21:46:15.220 回答
32

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

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

于 2008-11-25T22:17:53.190 回答
-22

您可以通过将该数据放入这样的列中来获得答案:

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

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

于 2017-04-23T05:03:03.713 回答