2008-11-25 65 views
92

比方说,我有一个表是这样的:如何获取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()似乎工作在而不是列。

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

回答

148

LEAST(A,B):

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

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

+10

对于像我这样需要'MAX()'的两个值的人来说,它是'GREATEST(a,b)':) – vektor 2015-03-17 15:59:28

-4

您可以通过将这些数据转化为一列像这样得到的答案:

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

在这里,我们把中score_a和012最小值通过将该值存储在名为minimum_score的列中来打印该文件。

相关问题