如何获得Postgres中两个字段的MIN()?
比方说,我有一个这样的表格:
name | score_a | score_b -----+---------+-------- Joe | 100 | 24 Sam | 96 | 438 Bob | 76 | 101 ... | ... | ...
我想selectscore_a和score_b的最小值。 换句话说,就像:
SELECT name, MIN(score_a, score_b) FROM table
结果当然是:
name | min -----+----- Joe | 24 Sam | 96 Bob | 76 ... | ...
但是,当我在Postgres中尝试这个时,我得到:“没有函数匹配给定的名称和参数types,您可能需要添加明确的types转换。 MAX()和MIN()似乎跨行而不是列。
是否有可能做我想要的?
至less (a,b):
GREATEST
和LEAST
函数从任意数量的expression式列表中select最大或最小值。 expression式必须全部转换为通用的数据types,这将是结果的types(详见10.5节 )。 列表中的NULL值将被忽略。 仅当所有expression式求值为NULL时,结果才为NULL。请注意,
GREATEST
和LEAST
不在SQL标准中,但是是一个常见的扩展。 其他一些数据库使得它们返回NULL,如果任何参数是NULL,而不是只有当所有的都是NULL时。
以下是PostgreSQL中LEAST()
函数文档的链接:
http://www.postgresql.org/docs/current/static/functions-conditional.html#AEN15582
你可以通过把这些数据放入这样一个列来得到答案:
SELECT name, MIN(score_a, score_b) as minimum_score FROM table
在这里,我们将score_a
和score_b
的最小值放在score_a
,并将其存储在名为minimum_score
的列中。