我有一些数据,简单来说是这样的:
我想要做的是将其汇总到一个表中,其中每个 ID 出现一次,并且各个部分以每列的某种形式的聚合字符串进行汇总,但重要的是每个聚合字符串都保持相同的顺序。例如:
对于单个列来说,这很容易,但是为了保证我保持顺序,我可能需要使用结构数组?在这种情况下,我可以使用一些 SQL 来聚合数据:
SELECT id, ARRAY_AGG(STRUCT(part_id AS ids, part_value AS values)) AS part FROM table
然而,在这个阶段,我坚持如何单独聚合 STRUCT 的每个元素并将其转回“正常”字段。
为清楚起见进行了编辑:替换了屏幕截图,因为前面的示例在 part_id 中具有唯一值并且它们已被订购。这些都不应该被假设。
数据库系统可能以任何顺序返回结果,您需要使用
ORDER BY
子句来定义基于一列或多列的排序(例如,您可以使用唯一 ID 或日期(时间戳)列,或两者都使用) :
SELECT id, STRING_AGG(part_id, '|' ORDER BY ordering_column) as part_ids,
STRING_AGG(CAST(part_value AS STRING), '|' ORDER BY ordering_column) as part_values
FROM mytable
GROUP id