Получить данные из одного столбца в двух столбцах - PullRequest
0 голосов
/ 09 января 2019

У меня есть таблица в PostgreSQL, что-то вроде этого:

ID      NAME
450     China
525     Germany
658     Austria

Я бы хотел запросить все имена с идентификатором <500 и одновременно с идентификатором> 500 и получить результат в двух столбцах, используя

array_to_string(array_agg(NAME),  ',  '). 

Мне нужен следующий результат:

column1 (ID < 500)      column2 (ID > 500)
China                   Germany, Austria

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Попробуйте использовать условное агрегирование:

SELECT
    STRING_AGG(CASE WHEN ID < 500 THEN NAME END, ', ')  AS ID_lt_500,
    STRING_AGG(CASE WHEN ID >= 500 THEN NAME END, ', ') AS ID_gt_500
FROM yourTable;

enter image description here

Демо

Edit:

Если вы используете версию Postgres, которая не поддерживает STRING_AGG, сделайте то, что вы уже делали:

SELECT
    ARRAY_TO_STRING(ARRAY_AGG(CASE WHEN ID < 500 THEN NAME END), ', ')  AS ID_lt_500,
    ARRAY_TO_STRING(ARRAY_AGG(CASE WHEN ID >= 500 THEN NAME END), ', ')  AS ID_gt_500
FROM yourTable;

Демо

0 голосов
/ 09 января 2019

Что-то вроде:

select (select string_agg(name, ', ') 
        from the_table
        where id <= 500) as column1, 
       (select string_agg(name, ', ') 
        from the_table
        where id > 500) as column2;

В качестве альтернативы:

select string_agg(name, ', ') filter (where id <= 500) as column1, 
       string_agg(name, ', ') filter (where id > 500) as column2
from the_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...