2

我知道的PostgreSQL,不像的MySQL,需要使用聚集函數,例如,當以列出所有選定字段的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查詢? (我不認爲上市的30場是有道理的,當我只需要2 ...)

+1

每個DBMS需要列出所有領域GROUP BY,MySQL是例外英寸由於這種行爲,它對許多錯誤負責。 –

回答

1

由於PostgreSQL的新版本(9.1+,如果我沒有記錯)僅由表的主鍵就可以組。以前的版本(以及大多數RDBMS)要求您提供所有列。唯一關鍵的異常的作品,因爲我們知道所有的屬性在功能上依賴於密鑰,所以如果將該鍵值修改,其他屬性將是不同的反正。

MySQL是一個例外,因爲弗蘭克在上面的評論中指出。這對這種情況下的數據庫的許多非確定性方面負責。非確定性通常是不好的,應該避免。