データのフォーマットは次のとおりです。
item_name | item_serial | sub_group | conc_stuff | other_data | more_data
----------+-------------+-----------+------------+------------+-----------
foo bar-01-a widget b-3 towel dent
foo bar-02-a widget a-1 42 mouse
foo bar-03-a widget p-1 babel dolphin
foo3 bar-21-f widget f-1 42 marvin
foo3 bar-22-f widget x-1 poetry vogon
希望どおりに実行するためのクエリを取得しました。問題は、より多くのデータを返す必要があることです。
SELECT item_name,
array_to_string(array_agg(conc_stuff), ',') as stuff
FROM dataset
WHERE some_selector = 'X'
GROUP BY item_name
ORDER BY item_name;
私は、単純でありながら論理的に見えるものを試しました。
SELECT item_name,
item_serial,
sub_group,
array_to_string(array_agg(conc_stuff), ',') as stuff
FROM dataset
WHERE some_selector = 'X'
GROUP BY item_name
ORDER BY item_name;
次のようなものを返す必要があります。
item_name | item_serial | sub_group | stuff
----------+-------------+-----------+-------------
foo bar-01-a widget a-1,b-3,p-1
foo3 bar-21-f widget f-1,x-1,g-5
foo6 bar-81-z widget r-1,d-8,w-0
これだけではなく:
item_name | stuff
----------+--------------
foo a-1,b-3,p-1
foo3 f-1,x-1,g-5
foo6 r-1,d-8,w-0
クエリにフィールドを追加しようとすると、次のようになります。
ERROR: column "stuff.item_serial" must appear in the GROUP BY clause or be used in an aggregate function
しかし、GROUP BY
item_serialはしたくありません。アグリゲートとともに返されるだけですよね?
サブクエリを実行する必要がありますか?これは簡単だと思います。複数の方法がある場合、どれが最も効率的ですか?連結するテキストの一部は座標(テキストの大きな文字列)です。