sql - 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 的列。
解决方案
您可以使用横向连接:
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.columns
SQL 语句或将列名复制到电子表格中并在那里生成代码来生成代码。
或者你可以使用 Postgres 的非标准greatest()
函数:
select t.*, greatest(col1, col2, . . .) as max_col
from t;
推荐阅读
- c++ - 无用的反斜杠会产生明确定义的字符串常量吗?
- javascript - 需要高级正则表达式帮助
- react-native - 有没有办法在原生 iOS 代码中调用 RCT_EXPORT_METHOD
- c - 用户输入仅限于奇数没有?代码有什么问题?
- excel - Excel 中的 XLOOKUP 函数
- django - 在文本区域显示文本 Django
- dashboard - 有没有办法只看到不编辑用户 cognos 仪表板?
- vba - 更改链接表源访问 2016
- angular - 带有多部分文件和其他参数的 Angular POST 请求
- kubernetes - 在 kubernetes 环境上部署时出现 Spire-agent 问题