簡體   English   中英

ActiveRecord :: StatementInvalid:PG :: UndefinedColumn:錯誤:.having('order_count> 5')時,列“ order_count”不存在

[英]ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column “order_count” does not exist when .having('order_count > 5')

上下文:我正在使用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')但兩者都.having('orders.order_count > 5') 在此先感謝您的幫助。 附言:我已經搜索了相當多的答案,但找不到解決方案。

HAVING子句在SELECT之前進行求值-因此服務器尚不知道該別名。

代替COUNT(orders.id) AS order_count您應該將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM