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 relationsG =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 senseG.project(U[:user_ID],I[:login_count].sum.as('total_login'))# Now you can groupG=G.group(U[:user_ID])#from this group you can project and group again (or group and project)# for the final relationTL=G.project(G[:total_login].as('logins') G[:ID].count.as('users')).group(G[:total_login])
请记住,这非常冗长,因为我想向您展示 *** 作的顺序,而不仅仅是“这是代码”.代码实际上可以用一半代码编写.
毛茸茸的部分是Count()
SELECT中任何未在聚合中使用的属性都应该出现在GROUP BY中,所以要小心count()
为什么要按total_login计数分组?在一天结束时,我只想问为什么不对所有安装的总登录数进行计数,因为最外面的计数分组使得用户信息无关紧要.
总结以上是内存溢出为你收集整理的ruby-on-rails – 使用Rails查询语言的复杂查询全部内容,希望文章能够帮你解决ruby-on-rails – 使用Rails查询语言的复杂查询所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)