2010-02-04 82 views
2

我有一个自定义的聚合函数,它将项目与分隔符连接起来。 如何调用此函数以确保结果是排序列表。按排序顺序的SQL调用聚合函数

像sum()这样的聚合函数将会得到相同的结果,无论这些行被提交给它的顺序如何。

我不能轻松地对聚合函数本身中的项进行排序,因为排序顺序取决于不同的字段。

例如:

product|size_id | size_string 
-------------------------------- 
prod1 |10  | x-small 
prod1 |20  | small 
prod1 |30  | medium 
prod1 |40  | large 
prod1 |50  | x-large 

我想查询返回:

PROD1,提供: X-小,小,中,大,X-大

iee (size_id)

SELECT product,concat_agg(size_string) GROUP BY product; 

将返回所需的数据,但不按排序顺序。

目前我正在使用函数按正确的顺序遍历大小并将它们添加到结果中。我怀疑可能有SQL方法让子查询产生所需的结果。必须有其他集合函数不可交换。

回答

4

您可以通过给GROUP_CONCAT功能添加订单(在MySQL下:

SELECT product, GROUP_CONCAT(size_string ORDER BY size_id SEPERATOR ',') 
GROUP BY product 

这里是official helpGROUP_CONCAT

+0

我不知道GROUP_CONCAT有ORDER BY感谢这个 – 2010-02-04 03:29:29

+2

!其实我使用的是postgres,它没有GROUP_CONCAT,但有一个“数组”功能,可以以类似的方式使用。感谢您让我走上正轨。 顺便说一句,应该是“ORDER BY size_id” – Loopo 2010-02-04 03:49:30