一尘不染

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

sql

假设我有一个这样的表:

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

有可能做我想做的事吗?


阅读 151

收藏
2021-03-17

共1个答案

一尘不染

最少(a,b):

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

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

2021-03-17