【问题标题】:Group_concat equivalent in postgresql 8.2.11postgresql 8.2.11 中的 Group_concat 等效项
【发布时间】:2013-05-03 13:22:51
【问题描述】:

我使用的是旧版本的 Postgres 8.2.11。谁能告诉我这个 Postgres 8.2.11 相当于 MySql 的 group_concat。我试过array_accumarray_to_stringstring_agg,但在这个版本中不起作用

【问题讨论】:

  • @hims056 你不能正确阅读我要求 8.2.11 的问题,而你显示的可能重复的问题是 8.4
  • 可能重复的问题不适用于 8.4。它的答案是 8.4。
  • @hims056 是的,但我需要 8.2.11 ......所以我找不到我的答案,你能给出 8.2.11 的答案吗
  • @hims056 您可能重复的问题中指定的答案都不适用于 8.2.11....所以请不要尝试关闭问题???

标签: sql postgresql postgresql-8.2


【解决方案1】:

cmets 中的"not quite duplicate" 应该为您指明正确的方向:create your own aggregate function。首先,您需要一个非聚合字符串连接函数,如下所示:

create function concat(t1 text, t2 text) returns text as $$
begin
    return t1 || t2;
end;
$$ language plpgsql;

然后你可以定义你自己的那个函数的聚合版本:

create aggregate group_concat(
    sfunc    = concat,
    basetype = text,
    stype    = text,
    initcond = ''
);

现在你可以group_concat 随心所欲:

select group_concat(s)
from t
group by g

我从我的档案中找到了这个,但我认为它应该可以在 8.2 中使用。

请记住,8.2 不再受支持,因此您可能希望尽快升级到至少 8.4。

【讨论】:

  • 我需要在组连接结果之间使用逗号
  • @soul:如果你想在结果中使用逗号,那么你可以修改 concat 以包含逗号,然后在 create aggregate 中添加一个 finalfunc,它会用一个简单的 @ 去掉前导逗号987654331@电话。您可能还想阅读有关如何处理 NULL 的手册并调整您的聚合以获得您想要的行为。
  • 现在查询的问题是它不接受空值,而组连接...你能给出一个可以用0替换空值的函数
  • @soul:你可以使用coalesce
  • 我的输出以此方式显示为此,以这种方式显示为1000046智能Lite Twister 20W 8901399132209 191.08 {213.04} {1000001 {213.04} {1000001 {213.04} {1000001 {213.04} {1000001} 1000047 Parle 20-20黄油饼干(50GM)8901719904431 4.46 {4.73,4.73} {1000001,1000002} `
猜你喜欢
  • 2021-09-21
  • 2012-05-07
  • 2022-01-17
  • 2012-10-22
  • 1970-01-01
  • 2019-11-11
  • 2013-01-31
相关资源
最近更新 更多