2

MySQL과 달리 PostgreSQL은 집계 함수를 사용할 때 group by 절에 선택된 모든 필드를 나열해야한다는 것을 알고 있습니다.PostgreSQL에서 로딩 및 그룹화하기

Transaction.select('sum(amount), category_id').group('category_id') 

충분합니다. 하지만 열렬한 연결을 시도 할 때 (예 :

Transaction.select('sum(amount), categories.name').includes(:category).group('categories.name') 

당신이 GROUP BY 절에서 두 모델의 모든 필드를 포함하지 않았기 때문에 작동하지 않습니다.

모델의 모든 입력란을 나열하지 않아도되는 방법이 있습니까? 아니면 N + 1 검색어를 수락 할 필요가 있습니까? (필자가 2 개만 필요로 할 때 목록 30 필드가 적합하지 않다고 생각합니다.)

+1

모든 DBMS는 그룹의 모든 필드를 나열해야하며, MySQL은 예외입니다. 이 때문에 많은 버그가 발생합니다. –

답변

1

PostgreSQL의 새 버전 (9.1+가 올바르게 호출 된 경우)은 테이블의 기본 키로 그룹화 할 수 있습니다. 이전 버전 및 대부분의 RDBMS에서도 모든 컬럼을 제공해야합니다. 키 전용 예외는 모든 속성이 키에 기능적으로 종속되어 있으므로 키가 변경되면 다른 속성도 구별됩니다.

Frank는 위의 설명에서 Frank가 지적한 것처럼 예외입니다. 이것은 이와 같은 경우에 해당 데이터베이스의 많은 비 결정적 측면을 담당합니다. 비결정론은 일반적으로 나쁘고 피해야합니다.

관련 문제