[英]Postgres - Group by multiple columns, Rails
我有一個名為property_audit_version_histories的表。 我正在使用以下代碼獲取記錄
@version_logs = PropertyAuditVersionHistory
.includes(:property_audit_version, :user)
.where(property_audit_version_id: params[:id])
結果包含3條記錄,其中2條具有相同的操作和user_id現在我需要使用列操作user_id對記錄進行分組
當我嘗試對記錄進行分組時出現以下錯誤
@version_logs = PropertyAuditVersionHistory
.includes(:property_audit_version, :user)
.where(property_audit_version_id: params[:id])
.group("action, user_id")
PG::GroupingError: ERROR: column "property_audit_version_histories.id" must appear in the GROUP BY clause or be used in an aggregate function
基於線程PG :: GroupingError:錯誤:列“ events.id”必須出現在GROUP BY子句中或在聚合函數中使用我已經修改了如下代碼
@version_logs = PropertyAuditVersionHistory
.includes(:property_audit_version, :user)
.group("property_audit_version_histories.id")
.where(property_audit_version_id: params[:id])
.group("action, user_id")
現在錯誤消失了,但結果仍然有3條記錄。 分組后,我希望只有2條記錄。
關於如何解決此問題的任何想法?
進行聚集時,您無法在postgresql中選擇所有類似mysql的列。
所以我想這應該工作。
@version_logs = PropertyAuditVersionHistory
.where(property_audit_version_id: params[:id])
.group("action", "user_id", "property_audit_version_id")
.select("user_id", "action", "property_audit_version_id")
我不知道您的模型如何,但這應該可行。 如果您需要更多字段,請告訴我
您需要指定要使用的列
.select("user_id")
但是對於您知道的列,將max(columnName) as columnName
是相同的
例如:
.select("MAX(user_id) as user_id, action")
確保100%確保分組后這些列的值相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.