在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中实现这一点最有效的方法是什么?我们一定要使用存储过程吗?
发布于 2009-01-29 19:23:09
为此,您必须定义一个用户定义的聚合。它有四个部分-四个函数(在IDS 12.10 Info Centre中搜索CREATE AGGREGATE ):
最终初始化器(INIT)
这是用大写字母表示的官方术语,而且比较直观。考虑一下计算平均值。
set sum = 0;N=0
= sum /N -- with N=0(零除)检查
组合器用于组合并行执行的中间结果;每个并行执行都从迭代器开始并生成中间结果。当并行执行完成时,单独的值集将使用组合器进行组合。
您可以在IDS中编写类似的代码-使用存储过程或C或Java UDR。
有关在Informix中实现的基于字符串的GROUP_CONCAT()函数,请参阅SO问题Show a one to many relationship as 2 columns — 1 unique row (ID & comma separated list)。
发布于 2009-01-28 22:22:59
当然,Informix中没有内置的函数来实现这一点。有没有其他主流的RDBMS有这样奇怪的聚合函数?按查询中未选中的列进行排序有点可疑,但是分组呢?这对我来说是新的。
您必须编写存储过程或UDR才能生成这样的数据集。老实说,我不会在数据库中尝试这样做。它看起来像是一个最适合这个输出的消费者(即应用程序/webapp/报表写入器等)的任务。
https://stackoverflow.com/questions/489081
复制相似问题