2

我有一个包含“一”和“二”列的表格:

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}

并最终使用 COPY 查询将其导出到 CSV 文件中

第一步我应该写什么查询?

4

1 回答 1

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

然后,您可以向此查询添加 aGROUP BY T1.one和 an 。ARRAY_AGG(...)

于 2012-01-05T08:31:38.433 回答