2013-08-13 6 views
8

मैं Django में निम्न क्वेरी करने की ज़रूरत में:कैसे गुणा और योग द्वारा समूह के साथ दो कॉलम Django

SELECT sum(T.width * T.height) as amount 
FROM triangle T 
WHERE T.type = 'normal' 
GROUP BY S.color 

मैं इस अपने Django ORM उपयोग कर सकते हैं कैसे? मैं इस कोशिश की:

Triangle.objects.filter(type='normal').\ 
       extra(select={'total':'width*height'}).\ 
       values('id', 'total').\ 
       annotate(amount=Sum('total')) 

लेकिन यह काम नहीं करता, त्रुटि मैं कि कुल मॉडल में नहीं है। मेरे द्वारा यह कैसे किया जा सकता है?

उत्तर

11

यहाँ आप क्या कर सकते हैं:

Triangle.objects.filter(type="normal").values('color').annotate(amount=Sum('id', field="width * height") 

यह निम्न क्वेरी (मैं पठनीयता के लिए आसान बना दिया है) का उत्पादन करेगा:

SELECT color, sum(width * height) as amount 
FROM triangle 
WHERE type = 'normal' 
GROUP BY color 

नोट: मैं color मान लिया गया है का एक क्षेत्र है अन्य क्षेत्रों के रूप में Triangle मॉडल।

+0

बहुत बहुत धन्यवाद दोस्त, आपके समाधान ने मुझे बहुत मदद की। – rodrixd

+0

क्या यह एक अनियंत्रित सुविधा है ...? मैं इसे Django दस्तावेज़ एग्रीगेशन पेज पर कहीं भी नहीं देखता हूं। https://docs.djangoproject.com/en/1.8/topics/db/aggregation/ – tufelkinder

+0

@tufelkinder यह थोड़ी देर हो रहा है मैंने django का उपयोग किया है और उत्तर बहुत पहले पोस्ट किया गया था। दस्तावेज़ों पर त्वरित रूप से देखने के बाद, मुझे नहीं लगता कि 'फ़ील्ड' कीवर्ड दस्तावेज है। अच्छी पकड़, अगर आप एक दस्तावेज़ीकरण संदर्भ पा सकते हैं तो खुशी होगी। धन्यवाद! – alecxe

संबंधित मुद्दे