2017-11-16 3 views
1

の配列に再マージ私はこのコードを使用してグループ化されたデータセットがあります。スプリット配列、一意な値のみを抽出し、その後、Postgresqlの

select 
array_to_string(array_agg(DISTINCT "Categories"), ',') as "Categories", "Name", ROW_NUMBER() OVER() as "ID" 
from data1 
group by "Name" 

をして、それは次のようになります。

+----+--------+-----------------------------------------+ 
| ID | Name | Categories        | 
+----+--------+-----------------------------------------+ 
| 1 | Class1 | Barry, Steve, Luke, Barry, Barry, Luke | 
+----+--------+-----------------------------------------+ 
| 2 | Class2 | Luke, Barry, Steve      | 
+----+--------+-----------------------------------------+ 
| 3 | Class3 | Gerald, Jacqueline, David, Barry, Barry | 
+----+--------+-----------------------------------------+ 

"カテゴリ"に一意の値しか持たないといけません。しかし、最初の行では、Barry, Steve, Lukeは文字列とみなされ、Barry, Lukeは文字列となるため、DISTINCTを使用した場合、Barryの数は切り捨てられません。

コンマ区切り文字を使用して文字列を分割してから再集計する必要があります。

出力は次のようになります。

+----+--------+-----------------------------------------+ 
| ID | Name | Categories        | 
+----+--------+-----------------------------------------+ 
| 1 | Class1 | Barry, Steve, Luke      | 
+----+--------+-----------------------------------------+ 
| 2 | Class2 | Luke, Barry, Steve      | 
+----+--------+-----------------------------------------+ 
| 3 | Class3 | Gerald, Jacqueline, David, Barry  | 
+----+--------+-----------------------------------------+ 
+1

グループ化している間にグループ化するのは、グループ化した後ではない方が簡単です。グループ化の手順を表示します。 –

+0

編集すると編集します - それは役に立ちますか? – edbyford

+0

あなたのコードはすでに動作しているはずです。私はなぜそれがしないのか分からない。 –

答えて

0

あなたはこの

select 
    ID, 
    Name, 
    (
    select string_agg(c, ',') 
    from (
     select 
     distinct trim(unnest(string_to_array(Categories, ','))) 
    ) t (c) 
) as Categories 
from your_table_name; 

のようなクエリを使用して一意の値を抽出することができます。しかし、グループ化しながら、個別の値を集計する方が良いでしょう。

関連する問題