2016-04-03 17 views
0

Bir DB masanınRails + ActiveRecords: Kayıtları tarihe göre gruplama ve bir koşula göre sayılarını nasıl gösterebilirim?

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 

Ve istenilen çıktıda böyle verilere sahip ı almak istiyorum: Bir sorgudan bu verilerin yüklenmesi yolu

Date  | Greater (or even) than 0 | Smaller than 0 
2016-04-01 | 2      | 1 
2016-04-02 | 1      | 0 
2016-04-03 | 2      | 1 

var mı? Tüm Alt sorgularımı düşünebilir ve getirilen verileri işlemek istediğim Rails görünümünde sorgulamalar yapabilirim.

cevap

0

böyle bir şey denemek istiyorum:

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

sizin created_at varsayarsak Spickermann yıllardan ancak daha az platforma özel benzeyen hiçbir zaman bileşenleri ... bir tarihtir. Bu ne yapar

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 o zaman LT_0 için yapılması Benzer daha sonra 0 (GTE_0) Eşit Büyüktür için tarihe göre özetliyor değeri 1 (0'dan az) ayarlarsa sayısını değerlendirmek olduğunu.

İlgili konular