Without commenting on the rest of it...to combine what you show here just
GROUP BY gender and SUM() everything else (i.e., turn the above into a
subquery and then do this)

David J.


Exactly.. I am done. Here is the ORM query :-

  def self.employee_learning_by_gender(question_id)
    cpd_id = Measure.find_by(option: 'CPD').id
    other_id = Measure.find_by(option: 'Others').id
   
    User.select("view.gender, sum(view.participant) as participant, sum(cpd) as 
cpd, sum(other) as other").from(User.joins(daily_action_answers: 
[:measure]).group("users.gender, daily_action_answers.measure_id")
                                                
.where("((daily_action_answers.day between ? and ?) and
                                                         
daily_action_answers.daily_action_id = ?)",
                                                         Date.today, 
Date.today.end_of_year,
                                                         question_id
                                                       )
                                                .select("users.gender, count(*) 
as participant,
                                                         case when 
daily_action_answers.measure_id = #{cpd_id} then 
avg(daily_action_answers.value) end as cpd,
                                                         case when 
daily_action_answers.measure_id = #{other_id} then 
avg(daily_action_answers.value) end as other"
                                                       ), 
:view).group("view.gender")
  end

Reply via email to