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