diff --git a/app/queries/admins/user_statistic_query.rb b/app/queries/admins/user_statistic_query.rb
index 866ec4d0b..d1811e5ab 100644
--- a/app/queries/admins/user_statistic_query.rb
+++ b/app/queries/admins/user_statistic_query.rb
@@ -83,7 +83,7 @@ class Admins::UserStatisticQuery < ApplicationQuery
           users.joins("LEFT JOIN myshixuns ON myshixuns.user_id = users.id AND myshixuns.status = 1 AND "\
                       "myshixuns.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
         else
-          users.left_joins(:myshixuns).where(myshixuns: { status: 1 })
+          users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id AND myshixuns.status = 1')
         end
 
       users.select("#{base_query_column}, COUNT(*) finish_shixun_count")
@@ -94,7 +94,8 @@ class Admins::UserStatisticQuery < ApplicationQuery
             .joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id "\
                    "AND games.status IN (0,1,2) AND games.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
         else
-          users.left_joins(myshixuns: :games).where(games: { status: [0, 1, 2] })
+          users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
+            .joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id AND games.status IN (0,1,2)")
         end
 
       users.select("#{base_query_column}, COUNT(*) study_challenge_count")
@@ -105,7 +106,8 @@ class Admins::UserStatisticQuery < ApplicationQuery
             .joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id "\
                    "AND games.status = 2 AND games.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
         else
-          users.left_joins(myshixuns: :games).where(games: { status: 2 })
+          users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
+            .joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id AND games.status = 2")
         end
 
       users.select("#{base_query_column}, COUNT(*) finish_challenge_count")