2

I am using the following code to group my active record relation by month. But as I extract attributes, I do not know how to get the date value as well.

This is my code:

books.group_by_month(:date).select("COUNT(*) as total, SUM(first_attribute) as fa").as_json

The output for the same is:

[
  {"total"=>273, "fb"=>2864977652, "id"=>nil}, 
  {"total"=>370, "fb"=>3882834096, "id"=>nil}, 
  {"total"=>37, "fb"=>300460723, "id"=>nil}
]

How will I know which hash is for which month, how can I include the month data in my query as well?

Deepak Mahakale
  • 22,834
  • 10
  • 68
  • 88

2 Answers2

0

Try this code

books.select("COUNT(*) as total, SUM(first_attribute) as fa").group_by { |record| record.date.strftime('%m') } 
Vishal
  • 7,113
  • 6
  • 31
  • 61
0

If not to use method group_by_month from groupdate gem you can do it this way:

books.select(
  "COUNT(*) AS total, SUM(first_attribute) AS fa, to_char(date, 'YYYY-MM') AS month"
).group(:month)

# output

[
  {"total"=>273, "fb"=>2864977652, "month" => "2022-06", "id"=>nil}, 
  {"total"=>370, "fb"=>3882834096, "month" => "2022-05", "id"=>nil}, 
  {"total"=>37, "fb"=>300460723, "month" => "2021-06", "id"=>nil}
]
Yurii Stefaniuk
  • 1,594
  • 2
  • 11
  • 16