在 Informix 的 SQL 中寻找一个模拟 MySQLgroup_concat
功能的查询。
MySQL 的group_concat
作用是创建组中所有成员的枚举。
因此数据如下:
订单号 | 项目名 | 价格 |
---|---|---|
1 | 纸 | 10 |
1 | 笔 | 5 |
2 | 糖 | 15 |
以及以下查询:
select group_concat(itemName), sum(price)
from order_details
group by orderid
Run Code Online (Sandbox Code Playgroud)
会产生:
项目 | 价格 |
---|---|
纸、笔 | 15 |
糖 | 15 |
在 Informix 中实现这一目标的最有效方法是什么?我们一定要使用存储过程吗?
您必须定义一个用户定义的聚合才能执行此操作。它有四个部分 - 四个函数(在IDS 12.10 信息中心搜索CREATE AGGREGATE):
\n\n这是大写字母的官方术语,而且比较直观。考虑计算平均值。
\n\n组合器用于组合并行执行的中间结果;每个并行执行都从迭代器开始并生成中间结果。当并行执行完成时,单独的值集将通过组合器进行组合。
\n\n您可以在 IDS 中编写类似的代码 - 使用存储过程或 C 或 Java UDR。
\n\n对于在 Informix 中实现的基于字符串的 GROUP_CONCAT() 函数,请参阅 SO 问题Show a one-to-manrelation as 2 columns \xe2\x80\x94 1 unique row (ID & comma split list) 。
\n