我在数据库表中有这样的数据
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视图中进行查询,我想要渲染所获取的数据。
答案 0 :(得分:0)
我会尝试这样的事情:
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
答案 1 :(得分:0)
假设您的Created_at是一个没有时间组件的日期......类似于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
这样做是评估数字,如果&gt; = 0然后它设置值1,然后它按日期求和大于等于0(GTE_0)类似于LT_0(小于0)。