题
寻找一个查询在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?我们一定要使用存储程序?
解决方案
你要定义一个用户定义的汇总这样做。那有四个部分四个职能(搜索 建立汇总 在 ID12.10信息中心):
- 初始化(INIT)
- 迭代(ITER)
- 结合(合并)
- 终结(最终)
这就是正式术语在国家首都,并且它是中等直观。想想一个计算平均水平。
- 初始化程序:设置和=0;N=0
- 迭代:设置总+=x;N++
- 合并器:设置和=sum1+sum2;设置N=N1+N2
- 终结:结果=sum/N-N=0(zero-鸿沟)检查
合并器是用于结合起来的中间结果从平行执行;每个并行开始执行的迭代和产生的中间结果。在并行执行完成,该单独设置的价值观是联合与合并。
你可以写类似的码在ID-使用存储程序或C或Java UDRs.
看到这样的问题 显示一个多关系,作为2列—1的唯一行(ID&逗号分开列) 对于一个基于字符串GROUP_CONCAT()实现的功能在Informix。
其他提示
有肯定是Informix的没有内置功能来做到这一点。是否有任何其他主流RDBMS有这样一个奇怪的聚集功能?排序方式列在查询未选择有点半信半疑,但分组?这是对我一个新的。
您必须编写一个存储过程或UDR产生这样的数据集。说实话,我也不会在数据库中尝试此。它看起来像最适合这个输出的消费者(即应用程序/ Web应用程序/报告,作家等)的任务。
不隶属于 StackOverflow