ruby-on-rails – 使用Rails查询语言的复杂查询

ruby-on-rails – 使用Rails查询语言的复杂查询,第1张

概述我有一个用于统计目的的查询.它会分解已登录指定次数的用户数.用户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 我有一个用于统计目的的查询.它会分解已登录指定次数的用户数.用户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 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查询语言的复杂查询所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1285726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存