Informix 中的 group_concat

cal*_*shy 5 sql informix

在 Informix 的 SQL 中寻找一个模拟 MySQLgroup_concat功能的查询。

MySQL 的group_concat作用是创建组中所有成员的枚举。

因此数据如下:

订单号 项目名 价格
1 10
1 5
2 15

以及以下查询:

select group_concat(itemName), sum(price)
from order_details
group by orderid
Run Code Online (Sandbox Code Playgroud)

会产生:

项目 价格
纸、笔 15
15

在 Informix 中实现这一目标的最有效方法是什么?我们一定要使用存储过程吗?

Jon*_*ler 4

您必须定义一个用户定义的聚合才能执行此操作。它有四个部分 - 四个函数(在IDS 12.10 信息中心搜索CREATE AGGREGATE):

\n\n
    \n
  1. 初始化程序(INIT)
  2. \n
  3. 迭代器(ITER)
  4. \n
  5. 合并(合并)
  6. \n
  7. 终结者(FINAL)
  8. \n
\n\n

这是大写字母的官方术语,而且比较直观。考虑计算平均值。

\n\n
    \n
  1. 初始化器:设置 sum = 0;N = 0
  2. \n
  3. 迭代器:设置sum += x;N++
  4. \n
  5. 组合器:设置sum = sum1 + sum2;设 N = N1 + N2
  6. \n
  7. 终结器:结果 = sum / N —— N=0(零除)检查
  8. \n
\n\n

组合器用于组合并行执行的中间结果;每个并行执行都从迭代器开始并生成中间结果。当并行执行完成时,单独的值集将通过组合器进行组合。

\n\n

您可以在 IDS 中编写类似的代码 - 使用存储过程或 C 或 Java UDR。

\n\n

对于在 Informix 中实现的基于字符串的 GROUP_CONCAT() 函数,请参阅 SO 问题Show a one-to-manrelation as 2 columns \xe2\x80\x94 1 unique row (ID & comma split list) 。

\n