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

वस्तुओं की संपत्ति द्वारा किसी जेसन या जेसनबी मान के अंदर किसी सरणी में ऑब्जेक्ट्स को कैसे सॉर्ट करें?

ऑब्जेक्ट में कुंजियों का क्रम एक jsonb . में शाब्दिक महत्वहीन है - वस्तु कुंजियों को वैसे भी आंतरिक रूप से क्रमबद्ध किया जाता है। (json इस संबंध में अलग है।) देखें:

सरणी तत्वों का क्रम एक jsonb . में (या json ) शाब्दिक महत्वपूर्ण है, यद्यपि। आपका अनुरोध सार्थक है। आप इस तरह पुन:क्रमित कर सकते हैं:

SELECT jsonb_agg(elem)
FROM  (
   SELECT *
   FROM   jsonb_array_elements(v_combined) a(elem)
   ORDER  BY (elem->>'ts')::int  -- order by integer value of "ts"
   ) sub;

dbfiddle यहां

लेकिन यह अधिक कुशल होगा सरणी को पहले ऑर्डर करने के लिए इसे असाइन करना:

...
DECLARE
   v_combined      jsonb;
BEGIN
   SELECT INTO v_combined  jsonb_agg(elem)
   FROM  (
      SELECT ts, json_agg(data_table_1) AS j
      FROM   data_table_1
      WHERE  fk_id = v_id

      UNION ALL 
      SELECT ts, json_agg(data_table_2)
      FROM   data_table_2
      WHERE  fk_id = v_id
      ORDER  BY ts
      ) sub;
...

सबक्वायरी से पंक्तियों के क्रम पर

मानक SQL में पंक्तियों का क्रम एक सबक्वेरी (या कोई टेबल एक्सप्रेशन) में भी महत्वहीन है। लेकिन पोस्टग्रेज में उपश्रेणियों में पंक्तियों के क्रम को अगले स्तर तक ले जाया जाता है। तो यह सरल प्रश्नों में काम करता है। यह दस्तावेज भी है। :

यदि आप इस पर भरोसा नहीं कर सकते हैं या नहीं कर सकते हैं, तो एक सुरक्षित विकल्प है:ORDER BY जोड़ें कुल समारोह के लिए ही। यह और भी छोटा है:

SELECT INTO v_combined  jsonb_agg(elem  ORDER BY (elem->>'ts')::int)
FROM   jsonb_array_elements(v_combined) a(elem);

लेकिन यह आमतौर पर धीमा होता है ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डॉकर के साथ Django और Postgresql को जोड़ना

  2. मैं sql या phpPgAdmin का उपयोग करके PostgreSQL डेटाबेस के लिए डेटाबेस एन्कोडिंग कैसे बदल सकता हूँ?

  3. PostgreSQL में पाठ संपीड़न

  4. गैर अद्वितीय टाइमस्टैम्प पर समय विभाजन के साथ TimescaleDB हाइपरटेबल कैसे बनाएं?

  5. केवल उन पंक्तियों का चयन करें जिनमें एक अद्वितीय आईडी दी गई है, इससे पहले की पंक्तियों से एक कॉलम बदल गया है