从ActiveRecord,Rails中的查询中选择前N%

时间:2014-02-05 21:32:45

标签: ruby-on-rails postgresql activerecord

如何根据某些订单子句选择表格的前N%行?希望只有一个数据库查询

根据this discussion,以下是从PostgreSQL中选择表中前10%行的方法:

SELECT * FROM mytbl ORDER BY num_sales DESC LIMIT
    (SELECT (count(*) / 10) AS selnum FROM mytbl)

根据this answer,在ActiveRecord的where子句中嵌套查询将生成嵌套的SELECT,而不是触发两个查询:

Item.where(product_id: Product.where(price: 50))

在没有太多SQL的情况下,如何在ActiveRecord中完成这样的事情?

1 个答案:

答案 0 :(得分:1)

这样做效率不高:

total_rows = MyClass.count
limit_rows = (0.1 * total_rows).to_i
MyClass.order("num_sales desc").limit(limit_rows)

当然还是:

MyClass.order("num_sales desc").limit((0.1 * MyClass.count).to_i)