我正在尝试从数据库中查询数据以创建图表时减去两个值。但是当我尝试代码时它总是返回null
downtime = Ticket.by_month.where(:sla => true).sum("restore_time - start_time")

答案 0 :(得分:0)
null
或restore_time
中有start_time
个值。在SQL中,null - X
和X - null
与null
和X
一样null + X
X + null
。这意味着,您null
或restore_time
列中的任何start_time
值都会将整个总和转换为null
。
您可以忽略null
s:
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的情况下,这个值当然必须与coalesce
调用的第一个参数具有相同的类型。
答案 1 :(得分:-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