简体   繁体   中英

Translate SQL query to Ruby on Rails

I need to convert a relatively simple query to display a total quiz average for a given user in a table set up in Rails/HAML. We have users take quizzes, record the scores, and display the average per quiz. We now want to total average of all quizzes. Easy:

SELECT (ROUND(AVG(`score`*100), 1)) FROM `quiz_results` WHERE `user_id`=$user

The results need to display in a table cell that is already set up, but I cannot figure this out.

Perhaps this line will help. It's pre-existing code that calculates the average of a particular quiz for that user:

%td.separate="#{(((lesson.quiz_results.average('score', :conditions => "user_id = #{@user.id}")) * 100).to_i)}%"

I have Rails 2.3.x.

Well, as i can see now - all you need is to remove particular quiz restriction, which is imposed by association usage lesson.quiz_results - instead of it just use model class, which is most likely QuizResult .

And, also, there is tiny bug in your existing code - .to_i will rounding down, you should use .round . See the difference:

irb(main):002:0> 1.6.to_i
=> 1
irb(main):003:0> 1.6.round
=> 2

So, full code should be:

(QuizResult.average('score', :conditions => "user_id = #{@user.id}") * 100).round

(I also removed some unnecessary brackets)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM