Postgres: получить максимальную длину по столбцам - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь получить запись, которая имеет максимальную длину.

У меня есть такая таблица:

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, но это не очень помогло, так как она ограничена одним столбцом. Я хочу, чтобы запрос анализировал все столбцы в одной строке и возвращал столбец с МАКСИМАЛЬНОЙ ДЛИНОЙ.

1 Ответ

2 голосов
/ 29 апреля 2020

Вы можете использовать боковое соединение:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...