一尘不染

Informix中的group_concat

sql

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

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

因此,数据如下:

orderid:itemName:price
      1:Paper   :10
      1:Pen     :5
      2:Sugar   :15

和以下查询:

select group_concat(itemName), sum(price)
from order_details
group by orderid

会产生:

items    :price
Paper,Pen:15
Sugar    :15

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


阅读 327

收藏
2021-03-10

共1个答案

一尘不染

为此,您必须定义一个用户定义的聚合。这包括四个部分-四个功能(在IDS
12.10信息中心中
搜索CREATE
AGGREGATE
):

  1. 初始化器(INIT)
  2. 迭代器(ITER)
  3. 合并(合并)
  4. 终结者(FINAL)

这是首都的官方术语,相当直观。考虑计算平均值。

  1. 初始化程序:设置总和= 0; N = 0
  2. 迭代器:设置总和+ = x; N ++
  3. 组合器:设置总和= sum1 + sum2; 设置N = N1 + N2
  4. 终结器:结果=总和/ N-N = 0(零分频)检查

合并器用于合并并行执行的中间结果。每个并行执行都从迭代器开始,并生成中间结果。并行执行完成后,将单独的值集与组合器组合在一起。

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

2021-03-10