Django query - "case when" with aggregation function -


मेरे पास निम्न डीजेन्गो मॉडल है (तालिका 'ए' के ​​लिए मैप):

  वर्ग ए (models.Model): name = models.CharField (max_length = 64, null = False) value = models.IntegerField () ...  

मैं निम्नलिखित सरल क्वेरी करना चाहता हूं शीर्ष पर:

  चुनें औसत (जब मूल्य (मूल्य & gt; 0 और मान & lt; = 50) तब 0 जब (मान & gt; 50 और मान & lt; 70) फिर 50 और 100 अंत) ए से जहां ...  

मैं कच्चे एसक्यूएल से बचने की कोशिश कर रहा हूं - यह कैसे डीजेंगो के साथ लागू किया जा सकता है (उपरोक्त उदाहरण में मैं औसत का उपयोग कर रहा हूं, लेकिन यही प्रश्न भी है अधिकतम, न्यूनतम, योग आदि के लिए प्रासंगिक)?

मैंने अतिरिक्त और कुल का उपयोग करने की कोशिश की:

  अतिरिक्त (चुनें = {'avg_field': case_when_query})  

और

  कुल (औसत ('avg_field')),  

लेकिन कुल फ़ंक्शन केवल मॉडल फ़ील्ड के साथ काम करता है इसलिए अतिरिक्त फ़ील्ड यहां उपयोग नहीं किया जा सकता है यह कैसे डीजेंगो के साथ किया जा सकता है?

मदद के लिए धन्यवाद

क्या कर सकते हैं ऐसा किया जा सकता है जो अभी भी हमें डीजेंगो क्वेरीस का उपयोग करने की अनुमति देगा:

  qs = A.objects.extra (चयन करें = {"avg_field": "avg (case when ...) "}")। फ़िल्टर (...)। मान ("avg_field")  

परिणाम का उपयोग करने के लिए:

  qs [0] ["avg_field "]  

और यह आवश्यक कार्यक्षमता की अनुमति देगा


Comments