簡體   English   中英

Postgres-按多列分組,Rails

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM