Ruby on rails Rails和Postgres—具有计数列的查询真的这么复杂吗?

Ruby on rails Rails和Postgres—具有计数列的查询真的这么复杂吗?,ruby-on-rails,ruby,postgresql,named-scope,Ruby On Rails,Ruby,Postgresql,Named Scope,我的应用程序中有以下型号,仅显示相关范围: class Audition < ActiveRecord::Base def self.with_new_applications columns = self.column_names.map{|c| "auditions.#{c}" }.join(', ') select(columns).joins(:applications).merge(Application.unreplied).group(columns)

我的应用程序中有以下型号,仅显示相关范围:

class Audition < ActiveRecord::Base
  def self.with_new_applications
    columns = self.column_names.map{|c| "auditions.#{c}" }.join(', ')

    select(columns).joins(:applications).merge(Application.unreplied).group(columns)
  end
end

class Application < ActiveRecord::Base
  def self.unreplied
    columns = Application.column_names.map{|c| "applications.#{c}" }.join(', ')

    select("#{columns}, count(messages.id) as message_count").
      joins('left outer join messages on messages.application_id = applications.id').
      group(columns).
      having('count(messages.id) = 0')
  end
end
由于使用了postgreSQL,与MySQL相比,查询似乎变得不必要的复杂,因为需要包含计数列/分组的所有列

我错过什么了吗?对我来说,这不太像Rails

这些查询能否以更简单的方式执行


谢谢

也许您可以通过使用ActiveRecord:counter\u缓存从完全不同的角度来解决这个问题?e、 g

belongs_to :application, :counter_cache => true

您可以通过这种方式进行简短、简单且高效的查询。

为什么您认为PostgreSQL中的查询比MySQL中的查询更复杂?ANSI-SQL是ANSI-SQL,它在两个数据库中的工作原理相同,只需一个简单的COUNT@FrankHeikens:我想他的意思是,在MySQL中,你可以使用带有GROUP BY的隐藏列:但在PostgreSQL中,你必须列出所有列,或者用另一种方式编写查询。差不多就是这样,似乎奇怪的是,使用PostgreSQL,您必须在每次查询时手动放入列中。也许我只是被ActiveRecord/ARel的魔力宠坏了,所以当一个看似简单的任务变得更复杂时,它显得很奇怪。撇开这一点不谈,在Rails方面,我是否可以做些不同的事情来获得更优雅的解决方案?几乎所有其他品牌的数据库都是如此,MySQL是个例外。2011年发布的PostgreSQL 9.1版将在功能上依赖于GROUP BY的主键。这将解决您的问题,但您必须等待。。。您可能想阅读这篇关于从GROUP BY中删除列的问题的文章:这是一个很好的建议,会使它更简单。干杯