Sum在Rails中返回null

时间:2017-03-04 01:29:24

标签: sql ruby-on-rails rails-activerecord

我正在尝试从数据库中查询数据以创建图表时减去两个值。但是当我尝试代码时它总是返回null



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




2 个答案:

答案 0 :(得分:0)

nullrestore_time中有start_time个值。在SQL中,null - XX - nullnullX一样null + X X + null。这意味着,您nullrestore_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