上下文:我正在使用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')
,但这些都没有。在此先感谢您的帮助。附:我搜索了很多答案,但无法找到解决方案。
答案 0 :(得分:0)
您应该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