2014-09-03 169 views
1

我正在爲指導目的建立一個網站。其中,從導師那裏得到關於與他的受指導者會面的日誌。作爲儀表板的一部分,我公開/計算並公開所需的數據。Django自定義聚合

問題說明:找出日誌進入指導集合的平均頻率。

我的方法:

步驟1.計算平均頻率即平均每輔導兩個直接發生日誌之間的差別。

步驟2,計算的平均是在步驟計算每個mentorships的平均頻率的1

我知道,我將通過mentorships被需要以組日誌和然後將其傳遞到自定義集合函數將執行步驟1和步驟2.我如何在Django中執行此操作?有人能幫我解決這個問題嗎?提前致謝。

回答

0

首先,您需要知道,其中應計算。他們是兩個可能的地方,每個地方都有優點和缺點。

第一個要做計算的地方是數據庫層。不幸的是,你沒有在django那種本地編寫查詢的函數。那麼你需要一個raw query。您是否還需要一個帶分析支持的DBMS:

sql = """  
    with table_with_predates as (
     SELECT Id, 
      some_date, 
      lag(some_date) pre_date 
     FROM menthors 
     WINDOW client_window as (partition by client order by idMenthor) 
    ) select Id, avg(some_date - pre_date) as data_average 
     from table_with_predates 
     group by Id  
    """ 
menthors = Menthor.objects.raw(sql) 
print ('Menthor average', menthors[0].name, menthors[0].data_average) 

第二步可以使用自定義sql完成。從這一點可以很容易推斷出來。

第二個要做計算的地方是應用層。從模型獲取日誌時間並在python中執行平均值:

log_times = (Log 
       .objects 
       .filter(menthor = some_menthor) 
       .values_list('some_date', flat=True) 
      ) 
menthor_average_log = reduce(lambda x, y: x + y, log_times)/len(log_times) 

您是否有現在的素材來啓動您的代碼。請享用。