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

मैं अपने डेटा से एक jsonb सरणी और वस्तुओं की सरणी कैसे वापस कर सकता हूं?

आप पहले शामिल होने के परिणाम को JSON के रूप में मानते हैं, टेक्स्ट स्ट्रिंग के रूप में नहीं, इसलिए jsonb_each() का उपयोग करें इसके बजाय jsonb_each_text() :

SELECT t.employee, json_object_agg(a.k, d.value) AS sales
FROM   mytable t
JOIN   LATERAL jsonb_each(t.data) a(k,v) ON a.k LIKE 'sales_%'
JOIN   LATERAL jsonb_to_recordset(a.v) d(yr text, value float) ON d.yr = '2012'
WHERE  t.employee = 'Jim'  -- works because employee is unique
GROUP  BY 1;

GROUP BY 1 GROUP BY t.employee . के लिए शॉर्टहैंड है .
परिणाम:

employee | sales
---------+--------
Jim      | '{ "sales_tv" : 40, "sales_radio" : 76 }'

मैंने आपकी क्वेरी को भी सुलझाया और सरल बनाया।

json_object_agg() JSON ऑब्जेक्ट के रूप में नाम/मूल्य जोड़े को एकत्रित करने में महत्वपूर्ण भूमिका निभाता है। वैकल्पिक रूप से jsonb पर कास्ट करें यदि आपको इसकी आवश्यकता है - या jsonb_object_agg() . का उपयोग करें पोस्टग्रेज 9.5 या बाद के संस्करण में।

स्पष्ट JOIN का उपयोग करना शर्तों को उनके सबसे स्पष्ट स्थान पर संलग्न करने के लिए वाक्य रचना।
वही बिना स्पष्ट JOIN वाक्य रचना:

SELECT t.employee, json_object_agg(a.k, d.value) AS sales
FROM   mytable t
     , jsonb_each(t.data)      a(k,v) 
     , jsonb_to_recordset(a.v) d(yr text, value float)
WHERE  t.employee = 'Jim'
AND    a.k LIKE 'sales_%'
AND    d.yr = '2012'
GROUP  BY 1;


  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. मैं एक फ़ाइल की प्रतिलिपि बनाने की कोशिश कर रहा हूँ, लेकिन त्रुटि संदेश मिल रहा है

  3. PostgreSQL स्ट्रीमिंग प्रतिकृति के साथ शुरुआत करना

  4. फेडोरा 33 . पर PostgreSQL 12 कैसे स्थापित करें

  5. PostgreSQL ट्रिगर और संग्रहीत कार्य मूल बातें