【问题标题】:Convert a complex PostgreSQL query to Ruby将复杂的 PostgreSQL 查询转换为 Ruby
【发布时间】:2014-01-16 19:38:17
【问题描述】:

我是新来的,很难将复杂的 Postgres 查询转换为 Ruby。这是查询:

SELECT  date_part('year', p.created_at) AS anio, 
date_part('month'::text, p.created_at) AS mes,
p.id_pais, pa.nombre AS nombre_pais, 
pr.id_region, re.nombre AS nombre_region,
co.id_provincia, pr.nombre AS nombre_provincia,
p.id_comuna, co.nombre AS nombre_comuna,
p.id_tipo_propiedad, p.id_modalidad,
count(*) AS total_propiedades,
sum((p.precio/mo.conversion_dolar)/p.dimension_propiedad) AS suma_precio_m2_dolar,
sum((p.precio/mo.conversion_dolar)/p.dimension_propiedad)/count(*) AS  promedio_precio_m2_dolar
FROM    propiedad AS p
INNER JOIN monedas AS mo ON (p.id_moneda = mo.id)
INNER JOIN comuna AS co ON (p.id_comuna = co.id)
INNER JOIN provincia AS pr ON (co.id_provincia = pr.id)
INNER JOIN region AS re ON (pr.id_region = re.id)
INNER JOIN pais AS pa ON (p.id_pais = pa.id)
WHERE   p.id_modalidad IS NOT NULL
AND p.created_at IS NOT NULL
AND p.precio > 1
AND p.dimension_propiedad > 1
GROUP BY date_part('year',p.created_at), date_part('month'::text, p.created_at), p.id_tipo_propiedad, 
    p.id_modalidad, p.id_pais, pr.id_region, co.id_provincia, p.id_comuna, pa.nombre, re.nombre, pr.nombre, co.nombre

如果您能帮我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: sql ruby-on-rails postgresql inner-join rails-activerecord


    【解决方案1】:

    我只是将类似的内容保留为普通 SQL 并将其交给select_rows

    connection.select_rows(%q{
      -- your big pile of SQL goes here
    }).each do |row|
      # row will be an array of Strings in here
    end
    

    您必须自己取消字符串化,但这应该不是很困难。你也可以使用execute:

    rows = connection.execute(%q{
      -- SQL goes here...
    })
    rows.each do |row|
      # row will be a hash
    end
    

    您的查询从数据库中提取了一堆与任何特定模型不对应的数据,因此尝试让 ActiveRecord 生成该 SQL 没有多大意义。如果查询正在生成模型,那么您将使用Model.find_by_sql(并且仍然避免试图说服 ActiveRecord 生成您所追求的 SQL)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-01
      • 2021-02-03
      相关资源
      最近更新 更多