【问题标题】:Chaining complex queries using ActiveRecord使用 ActiveRecord 链接复杂查询
【发布时间】:2014-05-13 05:10:53
【问题描述】:

假设我有一个 Rails 模型 Table,方法是 location,a1,a2,a3

我有一个形式为

的 postgresql 查询
SELECT avg(val) FROM (
    SELECT unnest(array[a1,a2,a3]) as val FROM table WHERE location = 'USA') alias; 

我想使用 activerecord,而不是作为原始 SQL,主要是因为我希望能够拆分查询,以便它可以链接,如下所示:

Table.where(location: 'USA').select(...)

(这样做的原因是我想将上面的postgresql查询作为方法移动到模型中。)

有什么办法可以做到吗?

【问题讨论】:

  • 不安?什么?你到底想做什么?如果没有更好的方法来编写该查询,则应将其保留在原始 SQL 中。
  • unnest(array(... 采用 a1,a2,a3 并创建一组整数,可以使用内置的 postgres 聚合函数(avg、stddev_samp 等))

标签: ruby-on-rails ruby activerecord ruby-on-rails-4


【解决方案1】:

Table.from( Table.where(location: 'USA').select('unnest(array[a1,a2,a3]) as val'), 'subquery_name' ).average('subquery_name.val')

现在,为了让您了解上述查询在做什么,请研究以下ActiveRecord 方法:

  1. from(value, subquery_name = nil)
  2. average(column_name, options = {})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多