PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Postgres . में वस्तुओं के JSON सरणी को क्वेरी करना

आपको अननेस्ट . करना होगा पहले फ़ंक्शन का उपयोग करके जेसन-ऑब्जेक्ट्स की सरणी (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')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेएसक्यूएल न्यूलाइन कैरेक्टर

  2. PostgreSQL में सबक्वेरी से अपडेट या इंसर्ट (एकाधिक पंक्तियाँ और कॉलम)

  3. मैं अपने मूल असेंबली के साथ बेचे गए घटकों की मात्रा की गणना करने के लिए SQL क्वेरी कैसे लिख सकता हूं? (पोस्टग्रेस 11/रिकर्सिव सीटीई?)

  4. पोस्टग्रेएसक्यूएल बाधा, जो कमिट पर चेक की जाती है और पहले नहीं

  5. PostgreSQL में सभी डेटाबेस का सार्वजनिक स्कीमा क्यों है?