簡體   English   中英

如何基於另一列SQL中的唯一值創建數組列

[英]How to create array column based on unique values in another column SQL

我有一個來自postgres表的數據,看起來像這樣:

Server    |    Database    | Contact 

server1   |    db1         | contact 1
server1   |    db2         | contact 2
server1   |    db3         | contact 3 
server2   |    db1         | contact 4
server2   |    db2         | contact 3

但是我需要將其轉換為以下格式的前端視圖:

Server    | Database        | Contact 

server1   | {db1, db2, db3} | {contact1, contact2, contact3}
server2   | {db1, db2}      | {contact3, contact4} 

對於Server列中的每個唯一值,我想在SQL查詢中的所有其他列之外創建一個數組列。 到目前為止,我有類似的內容,但是它似乎並未在Server列之外創建一個數組(為清晰起見,Contact列已排除):

SELECT     "table1"."Server"
            COALESCE( NULLIF( array 
           ( 
                  select DISTINCT x 
                  FROM   unnest( array_agg(DISTINCT "table1"."Server") ) x 
                  WHERE  x IS NOT NULL ), '{}' ), '{"No Data"}' ) AS "serverList" , 
           COALESCE( NULLIF( array 
           ( 
                  SELECT x 
                  FROM   unnest( array_agg(DISTINCT "table1"."Database") ) x 
                  WHERE  x IS NOT NULL ), '{}' ), '{"No Data"}' ) AS "databseList"
FROM       "table1"                                     
GROUP BY   
           "table1"."Server"

如何從“服務器”列中的唯一條目中正確創建陣列列?

array_agg()呢?

select server, array_agg(database) as databases, array_agg(contact) as contacts
from t
group by server;

如果值在數組中需要唯一,請使用distinct

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM