来自查询的.sum数据

时间:2017-08-05 15:45:29

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试.sum来自以下查询的字段:

  def self.busqueda_general(params)
  query = select('venta.Id,venta.TOTAL')
       .distinct
       .joins('left outer join detallevet ON venta.Documento=detallevet.Docto and venta.RutaId=detallevet.RutaId')
       .where("(venta.RutaId = :rutaId or :rutaId = '') AND (detallevet.Articulo = :articulo or :articulo = '')  AND (venta.CodCliente = :codcliente or :codcliente = '') AND (venta.IdEmpresa = :idempresa)",{rutaId: params[:search], articulo: params[:search3], codcliente: params[:search2], idempresa: params[:search6]})
  query = query.where('venta.Fecha >= ? AND venta.Fecha <= ?', (params[:search4].to_date.beginning_of_day).strftime('%Y-%m-%d %T'), (params[:search5].to_date.end_of_day).strftime('%Y-%m-%d %T')) if params[:search4].present? and params[:search5].present?
  query
   end

在控制器的方法中,我调用查询并将其求和如下:

@monto_total = Vent.busqueda_general(params).sum(:TOTAL)

但问题是查询显示的是由于.distinct而没有重复的记录,但是.sum正在累加所有记录,包括重复记录,忽略.distinct

2 个答案:

答案 0 :(得分:0)

试试这个

@monto_total = Vent.busqueda_general(params).sum(:TOTAL).to_f

你可以使用to_s(转换成字符串)to_f - &gt; float,to_i - &gt;整数

答案 1 :(得分:0)

你有一个group by子句,所以你得到每个ID / Total组合的总和(总计)。

   .group('venta.Id,venta.TOTAL')

对我来说,看起来你不需要这个group by子句。

UPDATE ::

query = where(Id: select('venta.Id')
 .joins('left outer join detallevet ON venta.Documento=detallevet.Docto and venta.RutaId=detallevet.RutaId')
 .where("(venta.RutaId = :rutaId or :rutaId = '') AND (detallevet.Articulo = :articulo or :articulo = '')  AND (venta.CodCliente = :codcliente or :codcliente = '') AND (venta.IdEmpresa = :idempresa)",{rutaId: params[:search], articulo: params[:search3], codcliente: params[:search2], idempresa: params[:search6]}))

将主query更改为此内容,保持其他所有内容相同。理想的方法是将join detallevet移至where条款。