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


140

假设我有一个这样的表:

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

有可能做我想做的事吗?

Answers:


246

最少(a,b):

GREATESTLEAST功能中选择任意数量的表达式的列表,最大或最小值。表达式必须全部可转换为通用数据类型,这将是结果的类型(有关详细信息,请参见第10.5节)。列表中的NULL值将被忽略。仅当所有表达式的计算结果均为NULL时,结果才为NULL。

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


20
对于像我这样的人,他们也需要MAX()两个值GREATEST(a, b):)
vektor 2015年


-16

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

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

在这里,我们将最小值放在并将其存储在名为的列中score_ascore_b并将其打印出来minimum_score


min(expression)存在。doc中的定义:所有带有expression的输入值中的expression的最小值是任何数字,字符串,日期/时间,网络或枚举类型,或这些类型的数组
charlesdg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.