2011-01-13 316 views
2

在Django的1.2.3我需要執行這樣的查詢:使用FLOOR()(或其它SQL函數)在Django查詢

SELECT FLOOR(quantity/100) FROM mytable 

有沒有什麼辦法讓它在純Django的風格?

然後,更困難的步驟:

SELECT FLOOR(quantity/100), count(*) 
FROM mytable 
GROUP BY FLOOR(quantity/100) 

是否有任何標準溶液?

+1

看到這個:http://stackoverflow.com/a/34622417/908336 – 2016-06-06 10:08:04

回答

3

我結束了使用extra子句:

MyModel.objects.extra(group='FLOOR(quantity/100)')\ 
    .values('group')\ 
    .annotate(count=Sum('quantity'))\ 
    .order_by() 

Sum的說法是相當misterious,但它的作品...

+0

請謹慎使用依賴於數據庫供應商的功能。通過在Django中進行計算,您可以達到相同的結果,同時保持數據庫不可知。然而,你可以交易表現獨立。 – 2011-01-17 10:23:40

2

您需要爲此使用SQL。 Django的ORM儘管非常有用,但它已經超越了它覆蓋的情況。我甚至不會說raw()查詢集方法在這裏會有幫助 - 我會使用execute custom SQL directly的功能。