首页 > 解决方案 > Postgres:跨列获取最大长度

问题描述

我正在尝试检索具有最大长度的记录。

我有一张这样的桌子:

ID | Column1    | Column2      | Column3
--------------------------------------------
1  |   123456   |   1234       |   12     
2  |   123      |   1234567    |   NULL

我想要这样的输出:

ID | Column1    | Column2      | Column3  | Max_Column
---------------------------------------------------------
1  |   123456   |   1234       |   12     |  123456
2  |   123      |   1234567    |   NULL   |  1234567

CASE在这种情况下,使用语句很容易实现它。但在原始表中,我有 20 多列。

我尝试使用该INFORMATION_SCHEMA.COLUMNS表,但它并没有太大帮助,因为它仅限于一列。我希望查询解析一行中的所有列并返回具有 MAX LENGTH 的列。

标签: sqlpostgresql

解决方案


您可以使用横向连接:

select t.*, v.max_col
from t cross join lateral
     (select max(col) as max_col
      from (values (col1), (col2), . . . ) v(col)
     ) v;

如果愿意,您可以使用information_schema.columnsSQL 语句或将列名复制到电子表格中并在那里生成代码来生成代码。

或者你可以使用 Postgres 的非标准greatest()函数:

select t.*, greatest(col1, col2, . . .) as max_col
from t;

推荐阅读