2017-03-04 23 views
0

我想在從數據庫查詢數據以創建圖形時減去兩個值。但它總是返回null當我嘗試代碼總和在Rails中返回空值

downtime = Ticket.by_month.where(:sla => true).sum("restore_time - start_time")

回答

0

你有restore_timestart_timenull值。在SQL中,null - XX - nullnull,全部爲Xnull + XX + null。這意味着您的任何restore_timestart_time列中的null值都會將整個金額轉換爲null

您可以用null小號忽略行:

Ticket.by_month 
     .where(:sla => true) 
     .where.not(:restore_time => nil) 
     .where.not(:start_time => nil) 
     .sum('restore_time - start_time') 

或將其轉換爲一些有意義您的背景:

Ticket.by_month 
     .where(:sla => true) 
     .sum('coalesce(restore_time, something_sensible) - coalesce(start_time, something_sensible)') 

或者是:

Ticket.by_month 
     .where(:sla => true) 
     .sum('coalesce(restore_time - start_time, something_sensible)') 

在哪裏something_sensible將是你想用來代替null s,這個值當然必須與​​3210調用的第一個參數具有相同的類型。

+0

非常感謝,你拯救我的一天的人 – alfitra

-1

這個怎麼樣?

restore_time = Ticket.by_month.where(:sla => true).sum("restore_time") 
start_time = Ticket.by_month.where(:sla => true).sum("start_time") 
downtime = restore_time - start_time 
+0

可悲的是數據返回一個值不是多個數據,按月分組 – alfitra