Mysql Rails+ActiveRecords:如何按日期分组记录,并根据条件显示它们的计数?
我在DB表中有这样的数据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 |
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进行的计算