我有以下型號:如何將活動記錄的查詢結果分組?
ProfileViews (id, user_id, viewer_id)
我試圖返回所有USER_VIEWS,這是由viewer_id分組...注viewer_id可以爲零,這是我想回來。我可以說無視等20倍...
爲什麼這不起作用?
@profile_views = ProfileView.select('*').where(:user_id => current_user.id).group(:viewer_id)
我有以下型號:如何將活動記錄的查詢結果分組?
ProfileViews (id, user_id, viewer_id)
我試圖返回所有USER_VIEWS,這是由viewer_id分組...注viewer_id可以爲零,這是我想回來。我可以說無視等20倍...
爲什麼這不起作用?
@profile_views = ProfileView.select('*').where(:user_id => current_user.id).group(:viewer_id)
,因爲你使用PostgreSQL(或一些類似嚴格的數據庫)和你的SELECT列表不匹配您GROUP您的查詢不起作用通過。 SELECT中的所有內容都必須位於聚合函數內(如COUNT
,AVG
,...),或者它必須出現在GROUP BY子句中;一些數據庫(如MySQL和SQLite)會猜測去除歧義,但其他數據庫(如PostgreSQL)則不會。我猜你看到類似的錯誤:在@profile_views
它映射
@profile_views = ProfileView.where(:user_id => current_user.id)
.count(:group => :viewer_id)
這將會給你一個簡單的哈希:
ERROR: column "X" must appear in the GROUP BY clause or be used in an aggregate function
你可能尋找更多的東西像這樣viewer_id
(包括nil
s)到視圖的數量。
AR的該位相當於這個SQL:
select viewer_id, count(*)
from profile_views
where user_id = #{current_user.id}
group by viewer_id
你會注意到,一切都在SELECT要麼在GROUP BY或聚合。
您無法在計數的同時獲取ProfileView對象。當您添加一個GROUP BY時,您將摺疊具有相同viewer_id
的行,並且行一旦失去身份,數據庫無法選擇應使用哪個行來實例化ProfileView。
你會得到什麼錯誤? – 2012-03-10 00:36:50