以下のコードの一部が余分な場合は謝罪しますが、私がやろうとしているすべての画像を描きたいと思っています。postgresのarray_agg関数とstring_agg関数の最初の結果
私の意図は
に
pickupLocations
と呼ばれるJSON配列から要素を選択しています。id_referral
にはpickupLocations
が多数あります。 以下のraw_addresses
という名前のCTEを参照してください。および文字列集約関数(例:
string_agg
)を使用して、各id_referral
の区切りフィールドを作成します。言い換えれば
、私は私の最後の選択で
#id_referral pickup_addresses
#1 4265 Hillsdale Ave. NE, Grand Rapids, MI 49525 | 3060 Cheney Ave. NE, Grand Rapids, MI 49525
#2 805 Kendalwood St. NE, Grand Rapids, MI 49505 | 711 Edgewood St. NE, Grand Rapids, MI 49505
に私のraw_addresses
CTE
で
#id_referral pickup_addresses
#1 4265 Hillsdale Ave. NE, Grand Rapids, MI 49525
#1 3060 Cheney Ave. NE, Grand Rapids, MI 49525
#2 805 Kendalwood St. NE, Grand Rapids, MI 49505
#2 711 Edgewood St. NE, Grand Rapids, MI 49505
から行くことができるようにしたいです。
以下のコードを使用している場合しかし、私は今、次のような結果に
#id_referral pickup_addresses
#1 4265 Hillsdale Ave. NE, Grand Rapids, MI 49525 | 4265 Hillsdale Ave. NE, Grand Rapids, MI 49525
#2 805 Kendalwood St. NE, Grand Rapids, MI 49505 | 805 Kendalwood St. NE, Grand Rapids, MI 49505
を取得しています。何らかの理由
WITH raw_addresses AS (
SELECT sr.id AS id_referral,
--parsing a json array which has many pickupLocations for a single id_referral
json_array_elements(sr."pickupLocations") -> 'pickupLocationAddress' AS pickup_address
FROM "ServiceReferrals" sr
)
--want to roll the pickup addresses into a single pipe-delimited field (willing work through an array too as shown with array_agg, but same problem there)
SELECT raw_addresses.id_referral,
string_agg(cast(pickup_address as varchar(100)), '|') AS pickup_addresses
FROM raw_addresses
GROUP BY raw_addresses.id_referral
、string_agg
機能は、各id_referral
の最初の値を繰り返しています。私もagg_array
を試して、同じ動作を得る。
理由については、どんなに高く評価されるだろう。
ただ、ダブルチェックに、 'raw_addresses'のためのあなたのCTEは、実際にあなたが説明してきた出力(例えばを生成しますが、' raw_addresses' SELECT * FROMんでしたその出力を得るために)? – Gerrat
@gerrat、no - CTEは期待どおりに動作します。私は 'pickupLocationAddress'を' pickupLocations'(各 'id_referral'の多く)からの要素として取得しています。最終的な結果は最終的な選択からのみ得られます。期待通り 'string_agg'は多少動作している - 誰もが(私は)Rでの分析のためにこれを実装しようとしている場合、それはだけではなく、それぞれのユニークな' pickupLocationAddress' – joemienko
を区切るの(パイプで区切られた)「最初の」 'pickupLocationAddress'を繰り返しています、私はdplyrで仕事を得ているこの答えに出くわしましたhttp://stackoverflow.com/a/28752857/2364325 – joemienko