在Rails中按月和按年分组

Gee*_*ToL 1 postgresql ruby-on-rails

我有关于postgresql的查询,我想在我的应用程序中使用rails实现

ActiveRecord::Base.connection.select_rows("SELECT to_char(date,'Mon') as mon, extract(year from date) as yyyy, SUM(CASE WHEN Title = 4 THEN Qty ELSE 0 END) AS sold FROM Transactions WHERE Store_id = 5 AND Product_id = 2 GROUP BY 1,2")
Run Code Online (Sandbox Code Playgroud)

我试过rails console,结果是:

?[1m?[36m (2.0ms)?[0m  ?[1m
SELECT to_char(date,'Mon') as mon, extract(year from date) as yyyy, SUM(CASE WHEN Title = 4 THEN Qty ELSE 0 END) AS sold FROM Transactions WHERE Store_id = 5 AND Product_id = 2 GROUP BY 1,2 
?[0m=> [["Jul", "2013", "113"], ["Oct", "2013", "73"], ["Jun", "2013", "291"], ["Sep", "2013", "13"], [" Aug", "2013", "81"]]
Run Code Online (Sandbox Code Playgroud)

结果没有按月份排序.

我试图添加,ORDER BY 1,2但结果如下:

?[1m?[36m (10.0ms)?[0m  ?[1m
SELECT to_char(date,'Mon') as mon, extract(year from date) as yyyy, SUM(CASE WHEN Title = 4 THEN Qty ELSE 0 END) AS sold FROM Transactions WHERE Store_id = 5 AND Product_id = 2 GROUP BY 1,2 ORDER BY 1,2
?[0m=> [["Aug", "2013", "81"], ["Jul", "2013", "113"], ["Jun", "2013", "291"], ["Oct", "2013", "73"], ["Sep", "2013", "13"]]
Run Code Online (Sandbox Code Playgroud)

为什么结果不按月和年排序?

我认为这个顺序是"按字母顺序"而不是日期..

Fel*_*van 8

我在Rails 5.0.1上这样做:

User.
where('created_at >= ? AND created_at <= ?', start, finish).
group('(EXTRACT(YEAR FROM created_at))::integer').
group('(EXTRACT(MONTH FROM created_at))::integer').
order('2 DESC, 3 DESC').count
Run Code Online (Sandbox Code Playgroud)

产生这个:

{
  [2017, 2]=>1908,
  [2017, 1]=>5910,
  [2016, 12]=>6299,
  [2016, 11]=>5717,
  [2016, 10]=>5912,
  [2016, 9]=>6098,
  [2016, 8]=>5897,
  [2016, 7]=>5896,
  [2016, 6]=>5902,
  [2016, 5]=>6279,
  [2016, 4]=>5510,
  [2016, 3]=>5323,
  [2016, 2]=>5139,
  [2016, 1]=>4293
}
Run Code Online (Sandbox Code Playgroud)