获取活动记录中真/假关联的百分比

时间:2016-12-28 18:15:03

标签: sql activerecord

我的应用程序中有以下模型 -

Subscription
has_many :user_todos

UserTodo
belongs_to :subscription

UserTodo有一个名为completed

的布尔字段

我是否有可能找到完成的user_todos数量超过50%的订阅列表?

1 个答案:

答案 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);