簡體   English   中英

Rails Active Record`group`:為什么只返回幾列?

[英]Rails Active Record `group`: Why does this return only a few columns?

我在Rails應用程序中的一條select語句中得到了這個:

...
 #<DailyStat subject: "Macroeconomics", topic: "Overview Of Economics", item_count: 160, correct_item_count: 0>,
 #<DailyStat subject: "Macroeconomics", topic: "Overview Of Economics", item_count: 1, correct_item_count: 0>,
 #<DailyStat subject: "Macroeconomics", topic: "Unemployment", item_count: 1, correct_item_count: 0>,
 #<DailyStat subject: "Macroeconomics", topic: "Inflation", item_count: 2, correct_item_count: 0>,...

當我對這些列進行基本選擇時,會得到此信息。 現在我的問題是,當我進行daily_stats.select("subject, topic, sum(correct_item_count), sum(item_count)").group(:topic)匯總列時,將item_counts和correct_item_counts合並在一起,結果是設置為:

#<DailyStat topic: "Demand And Consumer Behavior">, #<DailyStat topic: "Obligations">, #<DailyStat topic: "Computerized Auditing">, #<DailyStat topic: "Inflation">, #<DailyStat topic: "Overview Of Economics">

我輸了。 這肯定只是某種語法問題,但是我遇到了麻煩。 如何獲得計數的總和?

為了將subject包含在select子句中,您還需要將其添加到group子句中。

daily_stats.select(
  "subject, topic, sum(correct_item_count), sum(item_count)"
).group('topic, subject')

執行此查詢時,您將看到輸出為:

[#<DailyStat topic: "Demand And Consumer Behavior">, #<DailyStat topic: "Obligations">, #<DailyStat topic: "Computerized Auditing">, #<DailyStat topic: "Inflation">, #<DailyStat topic: "Overview Of Economics">]

之所以看不到sum(correct_item_count)sum(item_count)是因為它們不是模型的屬性。

如果檢查結果數組中對象之一的屬性,則將在其中看到計數,但沒有鍵。 鍵將為空。

嘗試:

daily_stats.select(
  "subject, topic, sum(correct_item_count), sum(item_count)"
).group('topic, subject').first.attributes

為了簡單起見,您可以對sum(...)都使用別名。 如下所示:

daily_stats.select(
  "subject, topic, sum(correct_item_count) as total_correct_item_count, sum(item_count) as total_item_count"
).group('topic, subject')

該查詢將為您提供每個結果對象的total_correct_item_counttotal_item_count屬性,以便您可以按以下方式訪問它們:

daily_stats.select(
  "subject, topic, sum(correct_item_count) as total_correct_item_count, sum(item_count) as total_item_count"
).group('topic, subject').first.total_correct_item_count

別名計數。 它們將成為返回對象的方法。

foos = foos.select("count(name) AS name_count").group(:bar)

foos.first.name_count # => something

Rails可能會在不為計數加別名時使用數據庫創建的列名,但是如果這樣做,我還是不想將其用作方法名。

暫無
暫無

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

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