我的应用程序中有以下模型 -
Subscription
has_many :user_todos
UserTodo
belongs_to :subscription
UserTodo
有一个名为completed
我是否有可能找到完成的user_todos数量超过50%的订阅列表?
答案 0 :(得分:0)
也许您可以将自定义SQL查询与find_by_sql
结合使用。
自定义sql查询可能如下所示:
select * from subscription
where id in (
select u1.subscription
from usertodo u1
group by u1.subscription
having
(select count(*)
from usertodo u2
where u2.subscription = u1.subscription
and u2.completed = true) >= 0.50 * count(*)
)
该查询假定以下架构。当然,您的架构会与此不同;但结构可能是一样的。我已经在MySQL 5.6中测试了这个查询(但是没有使用Active Records,因为设置环境会有很多工作);希望它有所帮助!
create table subscription (
id int,
name varchar(50)
);
insert into subscription (id, name) values
(1, "should be below 50 percent"), (2, "should be above 50 percent");
create table usertodo (
subscription int,
completed bool
);
insert into usertodo (subscription, completed) values
(1, true),(1,false),(1,false),(2,true),(2,true),(2,false);