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

django - एकत्रीकरण द्वारा कुल json फ़ील्ड विशिष्ट कुंजियाँ और क्रम

मैं समझ गया था कि आप प्रत्येक पंक्ति के लिए एक मान और b मान का योग करना चाहते हैं और फिर प्रत्येक पंक्ति को योग मान के अनुसार क्रमित करना चाहते हैं। सही?

-> ->> PostgreSQL में JSON प्रारूप में कुंजी या मान का चयन कैसे करें (मुझे नहीं पता कि यह MySQL या अन्य में भी काम करता है, मैंने सामान्य रूप से PostgreSQL के साथ काम किया है)। यहां . 'data . नाम के कॉलम में आपका डेटा 'है {"aa":3, "bb":2, "cc":5} . इसलिए आप data->>'aa' . द्वारा aa मान चुनें . क्या होगा अगर {'classification':{'pc':5000}} ? आपको पीसी मूल्य का चयन करने की आवश्यकता है। फिर data->'classification'->>'pc'

::नोटेशन कास्ट ऑपरेशन है।

CAST(data->'aa' AS INTEGER)

data->'aa'::int

क्लास RawSQL(sql, params, output_field=None)

RawSQL("((data->>'aa'::int), (0,)") का मतलब यह नहीं है कि अगर आ मौजूद नहीं है, तो इसका मान 0 है। 0 पैरा है।

queryset.annotate(val=RawSQL("select col from sometable where othercol = %s", (someparam,)))

ठीक है, अगर आप अपने डेटा को इस तरह संशोधित कर सकते हैं

  • आईडी:1, डेटा ={'आ':1, 'बीबी':2, 'सीसी':4}
  • आईडी:2, डेटा ={'आ':3, 'बीबी':2, 'सीसी':0}
  • id:3, डेटा ={'cc':7, 'bb':0, 'cc':0}
  • id:4, डेटा ={'bb':7, 'bb':0, 'cc':0}

यह काम कर सकता है।

Contract.objects.annotate(
sumVal=RawSQL("((data->>'aa')::int)", (0,))+RawSQL("((data->>'cc')::int)",(0,)))
.order_by('sumVal')

मैंने Coalesce का उपयोग करने का सुझाव दिया। इस प्रश्न के लेखक को पता चला। नीचे कोड है।

raw_sql = "+".join(["COALESCE((data->>%s)::int, 0)" for _ in ['aa', 'cc']) 
MyMoodel.objects.all()
.annotate(my_sum=RawSQL(raw_sql, params=('aa', 'cc')))
.order_by('my_sum')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL कस्टम अपवाद शर्तें

  2. पोस्टग्रेएसक्यूएल - खाली टेबल

  3. PostgreSQL:फ़्रीक्वेंसी टेबल विस्तार

  4. org.postgresql.geometric.PGpoint को हाइबरनेट प्रकार में कैसे मैप करें

  5. बाहर से एक डॉकटर कंटेनर में Postgresql से कनेक्ट करना