यह कुछ संस्करणों के बाद से एक पोस्टग्रेज बिल्ट-इन है, इसलिए अब आपको अपना खुद का परिभाषित करने की आवश्यकता नहीं है, नाम है array_agg()
।
test=> select array_agg(n) from generate_series(1,10) n group by n%2;
array_agg
--------------
{1,3,5,7,9}
{2,4,6,8,10}
(यह पोस्टग्रेज 8.4.8 है)।
ध्यान दें कि कोई ORDER BY
निर्दिष्ट किया गया है, इसलिए परिणाम पंक्तियों का क्रम उपयोग की जाने वाली समूह विधि (यहां, हैश) पर निर्भर करता है, अर्थात यह परिभाषित नहीं है। उदाहरण:
test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
?column? | array_agg
----------+--------------
1 | {1,3,5,7,9}
0 | {2,4,6,8,10}
test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
text | array_agg
------+--------------
0 | {2,4,6,8,10}
1 | {1,3,5,7,9}
अब, मुझे नहीं पता कि आपको {10,2,4,6,8}
क्यों मिलता है? और {9,7,3,1,5}
, चूंकि generate_series()
पंक्तियों को क्रम में भेजना चाहिए।