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

Sql 如何获取Postgres中两个字段的MIN()?,sql,postgresql,min,Sql,Postgresql,Min,假设我有一张这样的桌子: name | score_a | score_b -----+---------+-------- Joe | 100 | 24 Sam | 96 | 438 Bob | 76 | 101 ... | ... | ... SELECT name, MIN(score_a, score_b) as minimum_score FROM table 我想选择分数a和分数b的最小值。换句话说,类似于: SELECT n

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

name | score_a | score_b
-----+---------+--------
 Joe |   100   |   24
 Sam |    96   |  438
 Bob |    76   |  101
 ... |   ...   |  ...
SELECT name, MIN(score_a, score_b) as minimum_score
FROM table
我想选择分数a和分数b的最小值。换句话说,类似于:

SELECT name, MIN(score_a, score_b)
FROM table
结果当然是:

name | min
-----+-----
 Joe |  24
 Sam |  96
 Bob |  76
 ... | ...
但是,当我在Postgres中尝试这一点时,我得到了“没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。”MAX()和MIN()似乎跨行而不是跨列工作

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

(a,b):

最大值
最小值
函数从任意数量的表达式列表中选择最大值或最小值。表达式必须全部转换为公共数据类型,该类型将是结果的类型(有关详细信息,请参阅)。忽略列表中的空值。只有当所有表达式的计算结果都为NULL时,结果才会为NULL

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


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


您可以通过将数据放入如下列中获得答案:

name | score_a | score_b
-----+---------+--------
 Joe |   100   |   24
 Sam |    96   |  438
 Bob |    76   |  101
 ... |   ...   |  ...
SELECT name, MIN(score_a, score_b) as minimum_score
FROM table
在这里,我们将最小值放在
score\u a
score\u b
之间,并通过将该值存储在名为
minimum\u score

选择名称的列中进行打印,
select name,
       case
         when score_a < score_b then
          score_a 
         when score_b < score_a then
          score_b 
         else 
          --both amounts are equal, so we show score_a
          score_a 
       end
  from table
案例 当得分a<得分b时 得分 当得分b<得分a时 得分 其他的 --这两个数量相等,因此我们显示分数a 得分 结束 从桌子上
对于像我这样需要两个值的
MAX()
的人来说,这是
最伟大的(a,b)
:)@vektor:添加额外搜索词的好方法,这样可以通过谷歌找到答案!只有
min(表达式)
存在。文档中的定义:带有“expression”的所有输入值的表达式的最小值是任何数字、字符串、日期/时间、网络或枚举类型,或这些类型的数组