Saltar al contenido

Suma en varias columnas con Activerecord

Solución:

Puedes usar pluck para obtener directamente la suma:

Student.where(id: student_id).pluck('SUM(total_mark)', 'SUM(marks_obtained)')
# SELECT SUM(total_mark), SUM(marks_obtained) FROM students WHERE id = ?

Puede agregar las columnas deseadas o los campos calculados a pluck método, y devolverá una matriz con los valores.

Puede utilizar SQL sin formato si lo necesita. Algo como esto para devolver un objeto donde tendrás que extraer los valores … ¡Sé que especificas el registro activo!

Student.select("SUM(students.total_mark) AS total_mark, SUM(students.marks_obtained) AS marks obtained").where(:id=>student_id)

Para rieles 4.2 (anteriormente sin marcar)

Student.select("SUM(students.total_mark) AS total_mark, SUM(students.marks_obtained) AS marks obtained").where(:id=>student_id)[0]

NB los corchetes que siguen a la declaración. Sin ella, la declaración devuelve una Class :: ActiveRecord_Relation, no la instancia de AR. Lo importante de esto es que NO PUEDE usar first en la relación.

....where(:id=>student_id).first #=> PG::GroupingError: ERROR:  column "students.id" must appear in the GROUP BY clause or be used in an aggregate function

Si solo desea la suma de las columnas total_marks y marks_obtained, intente esto

Student.where(:id=>student_id).sum('total_mark + marks_obtained')
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *