我正在尝试根据每个(雇主)拥有的关联记录(雇员)的数量对表(雇主)进行排序/排序。
以下代码适用于 Rails 控制台,其中雇主记录按预期按员工数量排序:
Employer.joins(:employees).group(:id).order('count(employees.id) ASC')
但是,当实际尝试在开发中运行它时,我收到此错误:
PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
虽然我可以使用“sort_by”,但我更希望结果采用 ActiveRecord::Relation 格式。任何帮助将不胜感激。
最佳答案
通过将 distinct
添加到表达式中,我能够在控制台中重现此错误:
在你的情况下,它将是:
Employer.distinct.joins(:employees).group(:id).order('count(employees.id) ASC')
错误消息表明您必须将排序依据 (count(employees.id)
) 的表达式添加到选择列表中。
这可以通过显式指定选择列来实现:
Employer.select('employers.id, count(employees.id)').joins(:employees).group(:id).order('count(employees.id) ASC')
关于mysql - PG::InvalidColumnReference:按关联表排序时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47546842/