在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中实现这一目标的最有效方法是什么?我们肯定要使用存储过程吗?
答案 0 :(得分:3)
您必须定义用户定义的聚合才能执行此操作。这有四个部分 - 四个功能(在CREATE AGGREGATE中搜索IDS 12.10 Info Centre):
这是首都的官方术语,它具有中等直观性。考虑计算平均值。
组合器用于组合并行执行的中间结果;每个并行执行都从迭代器开始,并生成中间结果。当并行执行完成时,单独的值集合与组合器组合。
您可以在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 /报告编写器等)。