ActiveRecord :: StatementInvalid:PG :: UndefinedColumn:ERROR:column" order_count"当.having(' order_count> 5')时不存在

时间:2018-05-23 09:09:06

标签: sql ruby-on-rails activerecord rails-activerecord

上下文:我正在使用Active Admin,并希望定义一个范围,以便在下周向我显示任何超过5个订单的用户。这是Rails应用程序中的Postgres数据库。

User.where(vetting_status: ["Enabled"]).joins(:orders).where('orders.date >= ? AND orders.date <= ?', Date.today, Date.today + 6.days).select('users.first_name, COUNT(orders.id) AS order_count').group('users.first_name').having('order_count > 5').order('order_count desc')

但是,当我尝试运行它时,这会给我以下错误:ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "order_count" does not exist

问题在于.having('order_count > 5'),因为如果删除该部分,我可以运行查询。然而,这是至关重要的部分,我不确定我的错误。我已经尝试了.having('gardener.order_count > 5').having('orders.order_count > 5'),但这些都没有。在此先感谢您的帮助。附:我搜索了很多答案,但无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

在SELECT之前评估HAVING子句 - 因此服务器还不知道该别名。

您应该COUNT(orders.id) AS order_count You can look around here而不是count(orders) as order_count 我到目前为止已经尝试了它的工作,希望它会帮助你。

User.where(vetting_status: ["Enabled"]).joins(:orders).where('orders.date >= ? AND orders.date <= ?', Date.today, Date.today + 6.days).group('users.first_name').having('count(orders) > 5').order('count(orders) desc').select('users.first_name')

或者你应该像上面的查询一样: -

count(orders) as order_count

这也意味着它将获得用户的总订单作为订单计数。 像这样: -

User.where(vetting_status: ["Enabled"]).joins(:orders).where('orders.date >= ? AND orders.date <= ?', Date.today, Date.today + 6.days).select('users.first_name, count(orders) as order_count').group('users.first_name').having('count(orders) > 5').order('order_count desc')

因此,两个答案都没有任何错误。 :d