ruby-on-rails – 使用Rails查询语言的复杂查询
发布时间:2020-12-17 02:51:06 所属栏目:百科 来源:网络整理
导读:我有一个用于统计目的的查询.它会分解已登录指定次数的用户数.用户has_many安装和安装具有login_count. select total_login as 'logins',count(*) as `users` from (select u.user_id,sum(login_count) as total_login from user u inner join installation
我有一个用于统计目的的查询.它会分解已登录指定次数的用户数.用户has_many安装和安装具有login_count.
select total_login as 'logins',count(*) as `users` from (select u.user_id,sum(login_count) as total_login from user u inner join installation i on u.user_id = i.user_id group by u.user_id) g group by total_login; +--------+-------+ | logins | users | +--------+-------+ | 2 | 3 | | 6 | 7 | | 10 | 2 | | 19 | 1 | +--------+-------+ 是否有一些优雅的ActiveRecord样式可以获取相同的信息?理想情况下,作为登录和用户的哈希集合:{2 => 3,6 => 7,… 我知道我可以直接使用sql,但想知道如何在rails 3中解决这个问题. 解决方法# 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]) 请记住,这非常冗长,因为我想向您展示操作的顺序,而不仅仅是“这是代码”.代码实际上可以用一半代码编写. 毛茸茸的部分是Count() 为什么要按total_login计数分组?在一天结束时,我只想问为什么不对所有安装的总登录数进行计数,因为最外面的计数分组使得用户信息无关紧要. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |