【发布时间】:2022-10-24 20:59:43
【问题描述】:
我想聚合一个 VARIANT 列,同时保持相同的结构而不破坏它然后再次编译。
例如:
FEES_APPLIED
{ "FeesAppliedTotal": { "Amount": 0.4, "Currency": "GBP" }, "ReceiptFee": { "Amount": 0.1, "Currency": "GBP" }, "ReminderFee": { "Amount": 0.1, "Currency": "GBP" }, "TransactionFee": { "Amount": 0.2, "Currency": "GBP" } }
{ "FeesAppliedTotal": { "Amount": 0.4, "Currency": "GBP" }, "ReceiptFee": { "Amount": 0.1, "Currency": "GBP" }, "ReminderFee": { "Amount": 0.1, "Currency": "GBP" }, "TransactionFee": { "Amount": 0.2, "Currency": "GBP" } }
{ "FeesAppliedTotal": { "Amount": 0.4, "Currency": "GBP" }, "ReceiptFee": { "Amount": 0.1, "Currency": "GBP" }, "ReminderFee": { "Amount": 0.1, "Currency": "GBP" }, "TransactionFee": { "Amount": 0.2, "Currency": "GBP" } }
{ "FeesAppliedTotal": { "Amount": 0.4, "Currency": "GBP" }, "ReceiptFee": { "Amount": 0.1, "Currency": "GBP" }, "ReminderFee": { "Amount": 0.1, "Currency": "GBP" }, "TransactionFee": { "Amount": 0.2, "Currency": "GBP" } }
输出应该是:
{ "FeesAppliedTotal": { "Amount": 1.6, "Currency": "GBP" }, "ReceiptFee": { "Amount": 0.4, "Currency": "GBP" }, "ReminderFee": { "Amount": 0.4, "Currency": "GBP" }, "TransactionFee": { "Amount": 0.8, "Currency": "GBP" } }
这可能吗?
【问题讨论】:
-
顶部示例中的 JSON 仅在它位于不同的行中或者它是变体列中的数组(或者可能是其他东西)时才有效。这些是单独的行吗?对于像“GBP”这样无法求和的字段,它们是否总是相同的值,或者这会产生单独的行,如按表达式分组?
-
是的,第一个 JSON 是 4 个单独的行。并且 Currency 列对于同一组的键将具有相同的值。
-
我不相信您可以在将数据保留为 JSON 的同时做到这一点 - 但您可能可以在 SQL 语句中这样做(即您不必将 JSON 转换为表中的物理列)。使用 CTE 可能最容易做到这一点,例如第一个 CTE 从 JSON 中获取列,第二个 CTE 使用第一个 CTE 结果进行分组,最后将第二个 CTE 的结果转换回 JSON
标签: snowflake-cloud-data-platform aggregate-functions variant