【发布时间】:2021-12-31 17:23:27
【问题描述】:
我在 Rails 中有一个这样的查询:
def self.nominas(params)
query = select("payroll_employees.*,payroll_employees.total, concat(e.name, ' ', e.surname, ' ', e.other_surname) as nombre_empleado, ec.code as contrato, CASE WHEN payroll_employees.is_wage_integral = TRUE THEN 'Si' WHEN payroll_employees.is_wage_integral = FALSE THEN 'No' END AS salario_es_integral, pc.integral_wage AS p_c_integral_wage")
query = query.joins("inner join payrolls p on (p.id = payroll_employees.payroll_id) inner join employee_contracts ec on (ec.id = payroll_employees.employee_contract_id) inner join employees e on (e.id = ec.employee_id) inner join payroll_companies pc on (pc.company_id = p.company_id) ")
query = query.where('p.id = :nomina', {nomina: params[:id] })
query = query.group(:id, 'e.name', 'e.surname', 'e.other_surname', 'ec.code', 'pc.integral_wage')
query = query.having("(lower(concat(e.name, ' ', e.surname, ' ', e.other_surname)) LIKE :campo_busqueda or :campo_busqueda = '') OR (lower(ec.code) LIKE :campo_busqueda or :campo_busqueda = '')", {campo_busqueda: "%#{params[:buscador].try(:downcase)}%"})
query = query.order('nombre_empleado')
end
其中我有一列“total”,我需要对查询带给我的所有记录的“total”列求和,我的问题出现在这样做的时候:
@payroll_employees = PayrollEmployee.nominas(params)####
@sum_total = @payroll_employees.sum(:total)
它给我带来了这样的东西:
{[345, "Angel", "BONILLA", "MONTAÑO", "2010", true]=>0.106215575500000000000001e7, [079, "Bill f", "CABRERA", "RICO", "1846", true]=>0.1330346e7, ...
在我看来,这是因为我的查询有一个组。是否可以求和并得到一个数字而不是一组总数?
【问题讨论】:
-
我在查询中看不到总列。你能更新你的查询吗
-
您已经发现结果是分组的,因为您的查询中有一个
GROUP BY子句。如果您想获得所有记录的总和,则必须删除该分组。 -
@AniketShivamTiwari 谢谢回复,我已经更新了
-
@spickermann 感谢您的回复,这是我的问题,我如何计算总数?
-
正如我已经写过的,只需从该查询中删除这一行
query = query.group(:id, 'e.name', ...。
标签: ruby-on-rails ruby ruby-on-rails-5