ruby-on-rails - PostgreSQL 上的 Active Record 联合分组查询

标签 ruby-on-rails ruby postgresql activerecord

我在一个 Rails 项目上工作了一段时间,我刚刚遇到了(我认为是)一个小问题。

为了简单起见,我有 3 个这样的模型:

 class House < ActiveRecord::Base
  has_many :house_style_relationships
 end

 class HouseStyleRelationship < ActiveRecord::Base
  attr_accessible :percentage

  belongs_to :style
  belongs_to :house
 end

class Style < ActiveRecord::Base
  has_many :house_style_relationships
end

HouseStyleRelationship 模型只是让我们知道房屋的风格百分比。 例如,房子可以是 70% 的现代和 30% 的经典。

我需要做的是获取所有房屋的每种风格的平均值。 为此,我在 SQLite 下使用了这个有效查询:

houses_count = Houses.count
HouseStyleRelationship.joins(:style).select("style.name, SUM(house_style_relationships.percentage)/#{houses_count} as percentage").group("styles.id")

但是当我决定将所有这些东西推送到 Heroku 上时,我遇到了 PostgreSQL 的问题。 事实上,要创建一个 HouseStyleRelationship 对象(我什至不需要),ActiveRecord 会要求一个 HouseStyleRelationship.id,这会使 Group By 崩溃(通过查询)。 (PostgreSQL 不想对不同 id 的记录进行分组)

您是否有解决方案来防止 ActiveRecord 生成模型实例作为答案,从而从查询中删除 HouseStyleRelationship.id? (我不能使用 SELECT DISTINCT,因为我需要 SUM() 计算)

提前致谢!

最佳答案

您需要创建没有主键的连接表。迁移中的 create_table 语句应如下所示。

create_table :houses_style_relationships, :id => false do |t|

关于ruby-on-rails - PostgreSQL 上的 Active Record 联合分组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972655/

相关文章:

postgresql - 使用 slick 的 3.0.0 流式结果和 Postgresql 的正确方法是什么?

postgresql - 如何使用 GUI 在 heroku 上查看 PostgreSQL 数据库?

ruby-on-rails - rails has_one 通过关系不存在

ruby-on-rails - 每当 Gem AWS Elastic Beanstalk

ruby-on-rails - Rspec expect( ) 与 expect { }

Ruby Koans - 正则表达式和 .sub : Don't understand reason behind answer

ruby-on-rails - Rails ActiveRecord :joins with LEFT JOIN instead of INNER JOIN

ruby - 如何使用 pager 制作 ruby​​ 命令行应用程序?

ruby-on-rails - Rails 2.3.11 为表单创建模型并使用 ActiveRecord 验证

postgresql - 如何在 Laravel 5 Migrate 中使用时区设置时间戳