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

Django ORM में क्वेरी द्वारा समूहीकृत पर एक एनोटेट फ़ील्ड के अधिकतम योग की गणना करें?

आप कुल Max(Sum()) का योग नहीं कर सकते हैं , यह SQL में मान्य नहीं है, चाहे आप ORM का उपयोग कर रहे हों या नहीं। इसके बजाय, आपको अधिकतम खोजने के लिए तालिका में खुद से जुड़ना होगा। आप इसे सबक्वायरी का उपयोग करके कर सकते हैं। नीचे दिया गया कोड मुझे सही लगता है, लेकिन ध्यान रखें कि मेरे पास इसे चलाने के लिए कुछ नहीं है, इसलिए यह सही नहीं हो सकता है।

from django.db.models import Subquery, OuterRef

annotation = {
    'AcSum': Sum('intensity')
}
# The basic query is on Relation grouped by A and Category, annotated
# with the Sum of intensity
query = Relation.objects.values('a', 'b__category').annotate(**annotation)

# The subquery is joined to the outerquery on the Category
sub_filter = Q(b__category=OuterRef('b__category'))
# The subquery is grouped by A and Category and annotated with the Sum
# of intensity, which is then ordered descending so that when a LIMIT 1
# is applied, you get the Max.
subquery = Relation.objects.filter(sub_filter).values(
    'a', 'b__category').annotate(**annotation).order_by(
    '-AcSum').values('AcSum')[:1]

query = query.annotate(max_intensity=Subquery(subquery))

यह SQL उत्पन्न करना चाहिए जैसे:

SELECT a_id, category_id,
       (SELECT SUM(U0.intensity) AS AcSum
        FROM RELATION U0
        JOIN B U1 on U0.b_id = U1.id
        WHERE U1.category_id = B.category_id
        GROUP BY U0.a_id, U1.category_id
        ORDER BY SUM(U0.intensity) DESC
        LIMIT 1
       ) AS max_intensity
FROM Relation
JOIN B on Relation.b_id = B.id
GROUP BY Relation.a_id, B.category_id

Subquery . में शामिल होने को समाप्त करने के लिए यह अधिक प्रदर्शनकारी हो सकता है बैकएंड विशिष्ट सुविधा जैसे array_agg . का उपयोग करके (पोस्टग्रेज) या GroupConcat (MySQL) Relation.ids इकट्ठा करने के लिए जिन्हें बाहरी क्वेरी में एक साथ समूहीकृत किया जाता है। लेकिन मुझे नहीं पता कि आप किस बैकएंड का उपयोग कर रहे हैं।



  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. Postgres 9.4 . में JSONB प्रकार के कॉलम पर अद्यतन संचालन कैसे करें

  4. रेल कंसोल उपयोगकर्ताओं को आईडी की सरणी द्वारा ढूंढता है

  5. समवर्ती पहुंच पर तालिका में पंक्तियों के कुछ एनआर को कैसे चिह्नित करें?