假设我有一张这样的表:
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()似乎可以在行而不是列中工作。
是否有可能做我正在尝试的事情?
答案 0 :(得分:189)
LEAST(a,b):
GREATEST
和LEAST
函数从任意数量的表达式列表中选择最大值或最小值。表达式必须全部可转换为公共数据类型,这将是结果的类型(有关详细信息,请参阅Section 10.5)。列表中的NULL值将被忽略。仅当所有表达式求值为NULL时,结果才为NULL。请注意,
GREATEST
和LEAST
不在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_a
和score_b
中的最小值放在一起,并通过将该值存储在名为minimum_score
的列中来打印相同的值。