Mysql Rails+ActiveRecords:如何按日期分组记录,并根据条件显示它们的计数?

Mysql Rails+ActiveRecords:如何按日期分组记录,并根据条件显示它们的计数?,mysql,ruby-on-rails,ruby,activerecord,group-by,Mysql,Ruby On Rails,Ruby,Activerecord,Group By,我在DB表中有这样的数据 ID | numbers | created_at 1 | 10 | 2016-04-01 2 | 20 | 2016-04-01 3 | -8 | 2016-04-01 4 | 1 | 2016-04-02 5 | 81 | 2016-04-03 6 | -12 | 2016-04-03 7 | 0 | 2016-04-03 以及我想要得到的期望输出: Date |

我在DB表中有这样的数据

ID | numbers | created_at
1  |   10    | 2016-04-01
2  |   20    | 2016-04-01 
3  |   -8    | 2016-04-01
4  |    1    | 2016-04-02
5  |   81    | 2016-04-03
6  |  -12    | 2016-04-03
7  |    0    | 2016-04-03
以及我想要得到的期望输出:

Date       | Greater (or even) than 0 | Smaller than 0
2016-04-01 | 2                        | 1 
2016-04-02 | 1                        | 0
2016-04-03 | 2                        | 1 
有没有办法从一个查询中加载此数据?
我所能想到的就是我们的子查询和在Rails视图中执行查询,我想在其中呈现获取的数据。

我会尝试以下方法:

lines = Model.
  select('date, SUM(IF(number > 0, 1, 0)) as greater_count', SUM(IF(number < 0, 1, 0)) as smaller_count').
  group(:date).
  order(:date)

lines.each do |line|
  puts [line.date, line.greater_count, line.smaller_count]
end

假设您的创建时间是一个没有时间组件的日期。。。与spickermann类似,但不太特定于平台

Select Created_at as Date
     , Sum(case WHEN numbers >= 0 THEN 1 Else 0 END) as GTE_0
     , Sum(case WHEN numbers < 0 THEN 1 Else 0 END) as LT_0
FROM Table
GROUP BY Created_at
如果>=0,则计算数值,然后设置一个值1,然后按日期求和,大于等于0 GTE_0,类似于对小于0的LT_0进行的计算