我有一个名为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
@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条记录。
有关如何解决这个问题的想法吗?
答案 0 :(得分:0)
在进行聚合时,你无法在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")
我不知道你的模型怎么样但这应该有效。如果您需要更多字段,请告诉我
答案 1 :(得分:0)
您需要做的是使用
指定所需的列 .select("user_id")
但是对于您知道的列将使用相同的max(columnName) as columnName
例如:
.select("MAX(user_id) as user_id, action")
确保在分组后确保这些列的值相同。