diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index 4f5e5b81..5b8d825a 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -155,7 +155,15 @@ class ExercisesController < ApplicationController if(@external_user) render 'exercises/external_users/statistics' else - render 'exercises/statistics' + user_statistics = {} + query = "SELECT user_id, MAX(score) AS maximum_score, COUNT(id) AS runs + FROM submissions WHERE exercise_id = 101 GROUP BY user_id;" + ActiveRecord::Base.connection.execute(query).each do |tuple| + user_statistics[tuple["user_id"].to_i] = tuple + end + render locals: { + user_statistics: user_statistics + } end end diff --git a/app/views/exercises/statistics.html.slim b/app/views/exercises/statistics.html.slim index 0cb26e9a..4b7c5f61 100644 --- a/app/views/exercises/statistics.html.slim +++ b/app/views/exercises/statistics.html.slim @@ -22,8 +22,7 @@ h1 = @exercise tbody - @exercise.send(symbol).distinct().each do |user| tr - - submissions = @exercise.submissions.where('user_id=?', user.id) td = link_to_if symbol==:external_users, "#{user.name} (#{user.email})", {controller: "exercises", action: "statistics", external_user_id: user.id, id: @exercise.id} - td = submissions.maximum('score') or 0 - td = submissions.count('id') + td = user_statistics[user.id]['maximum_score'] or 0 + td = user_statistics[user.id]['runs'] td = @exercise.average_working_time_for(user.id) or 0