# Our relation variables(RelVars)
U =Table(:user, :as => 'U')
I =Table(:installation, :as => 'I')
# perform operations on relations
G =U.join(I) #(implicit) will reference final joined relationship
#(explicit) predicate = Arel::Predicates::Equality.new U[:user_id], I[:user_id]
G =U.join(I).on( U[:user_id].eq(I[:user_id] )
# Keep in mind you MUST PROJECT for this to make sense
G.project(U[:user_id], I[:login_count].sum.as('total_login'))
# Now you can group
G=G.group(U[:user_id])
#from this group you can project and group again (or group and project)
# for the final relation
TL=G.project(G[:total_login].as('logins') G[:id].count.as('users')).group(G[:total_login])
Имейте в виду, что это ОЧЕНЬ многословно, потому что я хотел показать вам порядок операций, а не просто "Вот код". Код на самом деле может быть написан с половиной кода.
Волосатая часть - граф ()
Как правило, любой атрибут в SELECT, который не используется в агрегате, должен отображаться в GROUP BY, поэтому будьте осторожны с count ()
Зачем вам группировать по количеству total_login?
В конце дня я бы просто спросил, почему бы вам просто не подсчитать общее количество входов в систему всех установок, так как информация о пользователях не имеет отношения к самой внешней группе подсчета.