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)
为什么结果不按月和年排序?
我认为这个顺序是"按字母顺序"而不是日期..
我在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)
| 归档时间: |
|
| 查看次数: |
2084 次 |
| 最近记录: |