आपको अननेस्ट . करना होगा पहले फ़ंक्शन का उपयोग करके जेसन-ऑब्जेक्ट्स की सरणी (json_array_elements
या jsonb_array_elements
यदि आपके पास jsonb डेटा प्रकार है ), फिर आप कुंजी निर्दिष्ट करके मानों तक पहुंच सकते हैं।
WITH json_test (col) AS (
values (json '[{"name":"Mickey Mouse","age":10},{"name":"Donald Duck","age":5}]')
)
SELECT
y.x->'name' "name"
FROM json_test jt,
LATERAL (SELECT json_array_elements(jt.col) x) y
-- outputs:
name
--------------
"Mickey Mouse"
"Donald Duck"
अद्वितीय नामों की गिनती प्राप्त करने के लिए, यह उपरोक्त के समान क्वेरी है, सिवाय इसके कि गिनती अलग एग्रीगेट फ़ंक्शन y.x->>name
पर लागू होता है
WITH json_test (col) AS (
values (json '[{"name":"Mickey Mouse","age":10},{"name":"Donald Duck","age":5}]')
)
SELECT
COUNT( DISTINCT y.x->>'name') distinct_names
FROM json_test jt,
LATERAL (SELECT json_array_elements(jt.col) x) y
->>
. का उपयोग करना आवश्यक है ->
. के बजाय पूर्व के रूप में (->>
) निकाले गए मान को टेक्स्ट के रूप में कास्ट करता है, जो समानता तुलना (अलग गिनती के लिए आवश्यक) का समर्थन करता है, जबकि बाद वाला (->
) मान को json के रूप में निकालता है, जो समानता की तुलना का समर्थन नहीं करता है।
वैकल्पिक रूप से, json
. को रूपांतरित करें jsonb
. के रूप में और jsonb_array_elements
. का उपयोग करें . JSONB
समानता तुलना का समर्थन करता है, इस प्रकार ->
के माध्यम से निष्कर्षण के साथ COUNT DISTINCT का उपयोग करना संभव है , यानी
COUNT(DISTINCT (y.x::jsonb)->'name')