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

Django:क्वेरी समूह महीने के अनुसार

सबसे पहले, आपको एक फंक्शन बनाना होगा जो आपके लिए महीना निकाल सके:

from django.db import models
from django.db.models import Func

class Month(Func):
    function = 'EXTRACT'
    template = '%(function)s(MONTH from %(expressions)s)'
    output_field = models.IntegerField()

उसके बाद आपको बस इतना करना है

  1. हर पंक्ति को महीने के साथ एनोटेट करें
  2. परिणामों को एनोटेट किए गए महीने के अनुसार values() . का उपयोग करके समूहित करें
  3. प्रत्येक परिणाम को Sum() . का उपयोग करके कुल योग के साथ एनोटेट करें

महत्वपूर्ण :यदि आपके मॉडल वर्ग में मेटा विकल्पों में निर्दिष्ट डिफ़ॉल्ट क्रम है, तो आपको एक खाली order_by() जोड़ना होगा खंड। इसका कारण https://docs.djangoproject.com/en/1.9/topics/db/aggregation/#interaction-with-default-ordering-or-order-by

है। <ब्लॉककोट>

order_by() . में उल्लिखित फ़ील्ड एक क्वेरीसेट का हिस्सा (या जो एक मॉडल पर डिफ़ॉल्ट क्रम में उपयोग किया जाता है) का उपयोग आउटपुट डेटा का चयन करते समय किया जाता है, भले ही वे values() में अन्यथा निर्दिष्ट न हों। बुलाना। इन अतिरिक्त क्षेत्रों का उपयोग "पसंद" परिणामों को एक साथ समूहित करने के लिए किया जाता है और वे अन्यथा समान परिणाम पंक्तियों को अलग कर सकते हैं।

यदि आप अनिश्चित हैं, तो आप बस खाली order_by() जोड़ सकते हैं खंड वैसे भी बिना किसी प्रतिकूल प्रभाव के।

यानी

from django.db.models import Sum

summary = (Invoice.objects
              .annotate(m=Month('date'))
              .values('m')
              .annotate(total=Sum('total'))
              .order_by())

पूरा सार यहां देखें:https://gist.github.com/alvingonzales/ff9333e39d221981e5fc4cd6cdafdd17

अगर आपको और जानकारी चाहिए:

अपने स्वयं के Func वर्ग बनाने के बारे में विवरण:https://docs.djangoproject.com/en/1.8/ref/models/expressions/#func-expressions

वैल्यूज () क्लॉज पर विवरण, (इस पर ध्यान दें कि यह क्लॉज के क्रम के संबंध में एनोटेट () के साथ कैसे इंटरैक्ट करता है):https://docs.djangoproject.com/en/1.9/topics/db/aggregation/#values

<ब्लॉककोट>

जिस क्रम में एनोटेट () और वैल्यू () क्लॉज किसी क्वेरी पर लागू होते हैं, वह महत्वपूर्ण है। यदि मान () क्लॉज एनोटेट () से पहले आता है, तो एनोटेशन की गणना वैल्यू () क्लॉज द्वारा वर्णित ग्रुपिंग का उपयोग करके की जाएगी।



  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. आर में int16/uint16 में PostgreSQL बाइटिया कॉलम हेक्स को डीकोड कैसे करें?

  3. PostgreSQL तालिका सांख्यिकी का विश्लेषण

  4. IP श्रेणियों पर क्वेरी के लिए PostgreSQL अनुक्रमणिका का उपयोग नहीं किया गया

  5. COUNT कुल में शून्य / 0 परिणाम कैसे शामिल करें?