2010-02-04 103 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