簡體   English   中英

select activerecord 中分組行的總和

[英]select sum of grouped rows in activerecord

無法將 SQL 查詢轉換為 ActiveRecord。這是我的域建模的簡化版本:

用戶 # has_many:baskets

籃子 # date:date, user_id:integer - has many:line_items, belongs_to:user

LineItem # quantity:integer - belongs_to:basket

我可以在 SQL 中進行以下查詢:

SELECT baskets.date, SUM(line_items.quantity) from baskets
INNER JOIN line_items ON line_items.basket_id = basket.id
WHERE baskets.user_id = 2
GROUP BY baskets.id
ORDER BY baskets.date DESC

在 PGAdmin 中運行此查詢時,我得到了我想要的兩列:購物籃日期和與該特定購物籃關聯的所有 line_item 數量的總和。

但是,當我嘗試為相同的數據編寫 activerecord 查詢時:

User.find(2).baskets
  .select('baskets.date,'SUM(line_items.quantity)')
  .joins(:line_items)
  .group('baskets.id')
  .order('baskets.date desc')

它返回籃子日期,但不返回分組的 line_item 數量的總和。 理想情況下,我希望得到以下格式的結果,例如 { date=>quantity, date=>quantity... },但不確定如何到達那里。

單引號正在為你搞亂,這應該有用

User.find(2).baskets
  .joins(:line_items)
  .group('baskets.id')
  .order('baskets.date desc')
  .select("baskets.date, sum(line_items.quantity) as quantity_sum")

你也可以使用pluck來返回一個日期和總和數組

User.find(2).baskets
  .joins(:line_items)
  .group('baskets.id')
  .order('baskets.date desc')
  .pluck("baskets.date, sum(line_items.quantity) as quantity_sum")

我對groupjoins有同樣的問題,但我的具體問題是 sum 列沒有出現在我的控制台中。 這讓我很困惑。

舉個簡單的例子

irb(main):011:0> User.select("SUM(id) AS sum_id").first
  Activity Load (41.7ms)  SELECT SUM(id) AS sum_id FROM `activities` LIMIT 1
=> #<Activity >
irb(main):012:0> User.select("SUM(id) AS sum_id").first.sum_id
  Activity Load (0.4ms)  SELECT SUM(id) AS sum_id FROM `activities` LIMIT 1
=> 3111821699

所以實際上sum_id沒有顯示在控制台中,因為它不是User model 的屬性。

如果您想知道為什么看不到匯總列,請檢查此內容。

暫無
暫無

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

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