首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Informix中的group_concat

Informix中的group_concat
EN

Stack Overflow用户
提问于 2009-01-28 20:00:22
回答 2查看 10.3K关注 0票数 4

在Informix的SQL中查找将模拟MySQL的group_concat函数的查询。

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

因此,数据如下:

代码语言:javascript
复制
orderid:itemName:price
      1:Paper   :10
      1:Pen     :5
      2:Sugar   :15

和以下查询:

代码语言:javascript
复制
select group_concat(itemName), sum(price)
from order_details
group by orderid

将产生:

代码语言:javascript
复制
items    :price
Paper,Pen:15
Sugar    :15

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-01-29 19:23:09

为此,您必须定义一个用户定义的聚合。它有四个部分-四个函数(在IDS 12.10 Info Centre中搜索CREATE AGGREGATE ):

最终初始化器(INIT)

  • Iterator (ITER)

  • Combine

  • (FINAL)

这是用大写字母表示的官方术语,而且比较直观。考虑一下计算平均值。

set sum = 0;N=0

  1. Initializer:
  2. 迭代器: set sum += x;set set sum = sum1 + sum2;set N= N1 + N2
  3. Finalizer:

= 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)

票数 4
EN

Stack Overflow用户

发布于 2009-01-28 22:22:59

当然,Informix中没有内置的函数来实现这一点。有没有其他主流的RDBMS有这样奇怪的聚合函数?按查询中未选中的列进行排序有点可疑,但是分组呢?这对我来说是新的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/489081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档