2012-01-05 3 views
2

У меня есть таблица со столбцами «один» и «два»:Выберите битовые в Postgresql

a | x 
a | y 
a | z 
b | x 
b | z 
c | y 

Я хочу написать запрос, чтобы дополнить его недостающих вложенных значения

b | null | y 
c | null | x 
c | null | z 

Тогда я отберет его array_agg(two) group by one, так что

a {1 1 1} 
b {1 0 1} 
c {0 1 0} 

И в конце концов, экспортировать его в CSV-файл с COPY запросом

Какой запрос я должен написать для первого шага?

ответ

1

Вы можете использовать CROSS JOIN, чтобы построить все возможные пары элементов, то в LEFT JOIN, чтобы проверить, если каждая пара элементов существует:

SELECT 
    T1.one, 
    T2.two, 
    CASE WHEN your_table.one IS NULL THEN 0 ELSE 1 END AS is_present 
FROM (SELECT DISTINCT one FROM your_table) T1 
CROSS JOIN (SELECT DISTINCT two FROM your_table) T2 
LEFT JOIN your_table 
ON T1.one = your_table.one AND T2.two = your_table.two 

Вы можете добавить GROUP BY T1.one и ARRAY_AGG(...) на этот запрос ,

Смежные вопросы