12

How to perform a multiple column group by in Django?
I have only seen examples on one column group by.
Below is the query i am trying to convert to Django ORM.

SELECT order_id,city,locality,login_time,sum(morning_hours),sum(afternoon_hours),sum(evening_hours),sum(total_hours) 
FROM orders 
GROUPBY order_id,city,locality,login_time`
John Moutafis
  • 22,254
  • 11
  • 68
  • 112
Shiva Rama Krishna
  • 365
  • 2
  • 4
  • 14

1 Answers1

19
from django.db.models import Sum

Your_Model.objects.values(
    "order_id", "city", "locality", "login_time"
).order_by().annotate(
    Sum("morning_hours"),
    Sum("afternoon_hours"),
    Sum("evening_hours"),
    Sum("total_hours"),
)

I hope the above code snippet helps (While answering, I had no idea whether morning hours, afternoon hours, etc are derived columns or existing fields in the table, because you have specified nothing of the sort in your question. Hence, I made my assumption and have answered your question). For grouping by multiple columns, there already exists a question on SO. See this link.

AKX
  • 152,115
  • 15
  • 115
  • 172
Shubhanshu
  • 975
  • 1
  • 8
  • 21