将NULL填充到最大长度以填充自定义聚合函数的数组

将NULL填充到最大长度以填充自定义聚合函数的数组,第1张

将NULL填充到最大长度以填充自定义聚合函数的数组

使用

array_agg_mult()
此相关答案中定义的自定义聚合函数:

  • 选择数据到Postgres数组中

您的预期结果是不可能的:

~~{{1},NULL,{abc}}~~

必须是:

{{1},{NULL},{abc}}
具有0或1个数组元素的简单情况

对于只替换空数组的简单情况:您可以使用以下方法实现:

WITH t(arr) AS (    VALUES      ('{1}'::text[])     ,('{}')     ,('{abc}')   )SELECt array_agg_mult(ARRAY[CASE WHEN arr = '{}' THEN '{NULL}' ELSE arr END])FROM   t;
n个元素的动态填充

使用

array_fill()
与NULL元件直到最大长度垫数组:

SELECt array_agg_mult(ARRAY[         arr || array_fill(NULL::text   , ARRAY[max_elem - COALESCE(array_length(arr, 1), 0)])       ]) AS resultFROM   t, (SELECt max(array_length(arr, 1)) AS max_elem FROM t) t1;

仍然仅适用于 维基本数组。

解释
  • 子查询
    t1
    计算基本一维数组的最大长度。
  • COALESCE(array_length(arr, 1), 0)
    计算此行中数组的长度。
    COALESCE
    默认为
    0
    for
    NULL

  • 用生成长度差异的填充数组

    array_fill()

  • 追加,要
    arr
    ||
  • 像上面一样用进行汇总
    array_agg_mult()

SQL提琴。 展示 一切
SQL Fiddle中的输出具有误导性,因此我将结果投射到此处的文本。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5675561.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存