2016-04-03 10 views
0

私はDBのテーブルでは、このようなデータRails + ActiveRecords:レコードを日付でグループ化し、条件に基づいてカウントを表示する方法は?

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 

が1つのクエリからこのデータをロードする方法はありますか? 私は私たちのサブクエリを思い出し、Railsビューでフェッチされたデータをレンダリングするためのクエリを実行できます。

答えて

0

私はこのような何かしようとするだろう:あなたのcreated_atはspickermannのに似て時間がないコンポーネント...とのデートが、あまりプラットフォーム固有であると仮定すると、

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 
0

を。

> = 0のときは、この数を評価されず、それはLT_0(0未満)のために行わ同様、それは次いで0に等しいより大きいため日付で合計1の値(GTE_0)を設定何
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 

関連する問題