Informix中的group_concat

时间:2009-01-28 20:00:22

标签: sql informix

在Informix的SQL中查找将模拟MySQL的group_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中实现这一目标的最有效方法是什么?我们肯定要使用存储过程吗?

2 个答案:

答案 0 :(得分:3)

您必须定义用户定义的聚合才能执行此操作。这有四个部分 - 四个功能(在CREATE AGGREGATE中搜索IDS 12.10 Info Centre):

  1. 初始化程序(INIT)
  2. Iterator(ITER)
  3. 合并(COMBINE)
  4. 终结者(FINAL)
  5. 这是首都的官方术语,它具有中等直观性。考虑计算平均值。

    1. 初始化程序:设置sum = 0; N = 0
    2. 迭代器:设置sum + = x; N ++
    3. 组合器:设置sum = sum1 + sum2;设置N = N1 + N2
    4. 终结者:结果=总和/ N - N = 0(零分割)检查
    5. 组合器用于组合并行执行的中间结果;每个并行执行都从迭代器开始,并生成中间结果。当并行执行完成时,单独的值集合与组合器组合。

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

      有关在Informix中实现的基于字符串的GROUP_CONCAT()函数,请参阅SO问题Show a one to many relationship as 2 columns — 1 unique row (ID & comma separated list)

答案 1 :(得分:1)

Informix中肯定没有内置函数来执行此操作。是否有其他主流RDBMS具有如此奇怪的聚合功能?按查询中未选择的列排序有点可疑,但是分组?这对我来说是新的。

您必须编写存储过程或UDR才能生成此类数据集。说实话,我不会在数据库中尝试这个。它看起来像一个最适合此输出的消费者的任务(即应用程序/ webapp /报告编写器等)。