gpt4 book ai didi

sql - Informix 中的 group_concat

转载 作者:行者123 更新时间:2023-12-04 05:21:28 25 4
gpt4 key购买 nike

在 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 中实现这一目标的最有效方法是什么?我们一定要使用存储过程吗?

最佳答案

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

  • 初始化程序 (INIT)
  • 迭代器 (ITER)
  • 联合 (COMBINE)
  • 终结器(最终)

  • 这是大写字母中的官方术语,比较直观。考虑计算平均值。
  • 初始化程序:设置总和 = 0; N = 0
  • 迭代器:set sum += x; N++
  • 组合器:设置 sum = sum1 + sum2;设置 N = N1 + N2
  • 终结器:结果 = 总和/N -- N=0(零除)检查

  • 合并器用于合并并行执行的中间结果;每个并行执行都从迭代器开始并生成中间结果。当并行执行完成时,单独的值集与组合器组合。

    您可以在 IDS 中编写类似的代码 - 使用存储过程或 C 或 Java UDR。

    请参阅 SO 问题 Show a one to many relationship as 2 columns — 1 unique row (ID & comma separated list)用于在 Informix 中实现的基于字符串的 GROUP_CONCAT() 函数。

    关于sql - Informix 中的 group_concat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489081/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com