... कहाँ इस तरह के array_X उपयोगिता के लिए सांख्यिकीय पुस्तकालयों (?) ??
खोजने का प्रयास करें ... कुछ देखें लेकिन कोई मानक नहीं:
सरलतम और तेज़ array_distinct()स्निपेट-लिब फ़ंक्शन
के लिए सबसे आसान और शायद तेजी से कार्यान्वयन यहाँ के array_unique()या array_distinct():
CREATE FUNCTION array_distinct(anyarray) RETURNS anyarray AS $f$
SELECT array_agg(DISTINCT x) FROM unnest($1) t(x);
$f$ LANGUAGE SQL IMMUTABLE;
नोट: यह किसी भी डेटाटाइप के साथ अपेक्षा के अनुसार काम करता है, सरणी के सरणी को छोड़कर,
SELECT array_distinct( array[3,3,8,2,6,6,2,3,4,1,1,6,2,2,3,99] ),
array_distinct( array['3','3','hello','hello','bye'] ),
array_distinct( array[array[3,3],array[3,3],array[3,3],array[5,6]] );
"साइड इफेक्ट" तत्वों के एक सेट में सभी सरणियों को विस्फोट करना है।
पुनश्च: JSONB सरणियों के साथ ठीक काम करता है,
SELECT array_distinct( array['[3,3]'::JSONB, '[3,3]'::JSONB, '[5,6]'::JSONB] );
संपादित करें: अधिक जटिल लेकिन उपयोगी, एक "ड्रॉप नल" पैरामीटर
CREATE FUNCTION array_distinct(
anyarray,
boolean DEFAULT false
) RETURNS anyarray AS $f$
SELECT array_agg(DISTINCT x)
FROM unnest($1) t(x)
WHERE CASE WHEN $2 THEN x IS NOT NULL ELSE true END;
$f$ LANGUAGE SQL IMMUTABLE;