내 애플 리케이션에서 다음과 같은 모델을 (관련 범위를 보여주는) :Rails & Postgres - 카운트 열이있는 쿼리가 실제로 복잡합니까?
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을 사용하기 때문에 쿼리가 불필요하게 복잡해진 것처럼 보입니다. count 열/그룹화를위한 열.
뭔가 빠졌습니까? 나에게 레일스처럼 보이지는 않습니다.
이러한 쿼리를보다 간단한 방식으로 실행할 수 있습니까?
고맙습니다
PostgreSQL에서 MySQL과 같이 쿼리가 더 복잡한 이유는 무엇이라고 생각하십니까? ANSI-SQL은 ANSI-SQL이며 두 데이터베이스 모두에서 간단한 COUNT가 동일합니다. –
@ Frank Heikens : MySQL에서 숨겨진 열을 GROUP BY : http://dev.mysql.com/과 함께 사용할 수 있음을 의미한다고 생각합니다. doc/refman/5.0/ko/group-by-hidden-columns.html하지만 PostgreSQL에서는 모든 열을 나열하거나 다른 방법으로 쿼리를 작성해야합니다. –
꽤 많이 PostgreSQL을 사용하면 각 쿼리를 사용하여 수동으로 열을 입력해야한다는 것이 이상하게 보입니다. 어쩌면 나는 ActiveRecord/ARel 매직에 의해 버릇이 없으므로 겉보기에 단순한 작업이 더 복잡 해지면 이상하게 보일 수 있습니다. 레일스의 앞면에는 더 우아한 해결책을 찾기 위해 다르게 할 수있는 것이 있습니까? –