0

2つの列AとBがあり、列Aの項目ごとにグループ化された列Bの項目(およびそれらの数)のリストを取得し、その情報を使用して新しいテーブルを作成したいと思います。したがって、新しいテーブルは次のようになります。

newCol1 | newCol2
--------+--------
a1,     | b1:3,b4:1,b7:11
a2,     | b2:1,b3:5,b4:3,b8:2

...など。(ただし、区切り文字は何でもかまいません。アイテムとカウントを連結できない場合は、アイテムのリストを含む1つの列と、区切り文字で区切られたカウントのリストを含む別の列を作成することもできます。)

Javaでこれを行うには、最初にすべてのアイテムを取得し、カウントを更新してマップに保存してから、新しいテーブルを更新しますが、PostgreSQLでこれを行う方法があるかどうか(おそらく関数を作成することによって)疑問に思いました。

PostgreSQLの配列関数を見てきましたが、うまくいきませんでした。そのようなデータを保存するためのポインタと提案をいただければ幸いです。

4

2 に答える 2

1

テーブル定義も入力データも提供しなかったため(出力が生成されるはずです)、これは暗闇の中でのショットにすぎません。

select a, string_agg(b||':'||to_char(b_count), ',)
from (
   select a, 
          b,
          count(b) over (partition by a) as b_count,
   from the_unknown_table
) t
group by a
于 2012-06-20T17:47:35.950 に答える
1

abタイプですtext、私は推測します。

SELECT a, array_agg(bs) AS b_list
FROM  (
    SELECT a, b || ':' || count(*) AS bs  -- coerced to text automatically
    FROM   tbl
    GROUP  BY a, b
    ORDER  BY a, b   -- to sort b_list in the result
    ) x
GROUP  BY a;

またはstring_agg()、@ a_horseが示すように使用して、結果として配列ではなく文字列を取得します。

于 2012-06-20T17:52:45.613 に答える