2017-01-04 1 views
0

私は、適切な名前のuser_dataオブジェクト内にユーザデータを保持するRailsアプリケーションを持っています。過去12か月間毎月作成されたアクティブユーザー(ステータス= 'アクティブ')の合計ユーザー数とユーザー数を示すサマリー表を表示します。私のPostgresデータベースに対してSQLで概要ActiveRecordを使ったグループによる集計

、私は次のクエリ(あなたはその点を無視することができますので、私はそこに使う日付は、アプリケーションによって計算された)と私が望む結果を得ることができます。

SELECT total.creation_month, 
     total.user_count AS total_count, 
     active.user_count AS active_count 
FROM 
(SELECT date_trunc('month',"creationDate") AS creation_month, 
     COUNT("userId") AS user_count 
    FROM user_data 
    WHERE "creationDate" >= to_date('2015 12 21', 'YYYY MM DD') 
    GROUP BY creation_month) AS total 
LEFT JOIN 
(SELECT date_trunc('month',"creationDate") AS creation_month, 
     COUNT("userId") AS user_count 
    FROM user_data 
    WHERE "creationDate" >= to_date('2015 12 21', 'YYYY MM DD') 
    AND status = 'Active' 
    GROUP BY creation_month) AS active 
ON total.creation_month = active.creation_month 
ORDER BY creation_month ASC 

ActiveRecordでこのクエリを書く方法を教えてください。

私は以前、総ユーザー数を表示して月単位でグループ化しましたが、アクティブユーザー数の追加列を追加する方法には苦労しています。

私のアプリケーションはRuby 2.1.4とRails 4.1.6です。

答えて

0

私はこれをActiveRecordのやり方でやってみました。代わりに、私は単なる文字列の中に私のクエリを構築し、

ActiveRecord::Base.connection.execute(sql_string) 

に文字列を渡すこれが私の結果セットではなく、オブジェクトのセットの配列として出てきたの副作用を持っていました。だから、値の取得は

user_data['total_count'] 

user_data.total_count 

のような(user_dataのは、結果セットから単一のレコードに割り当てられた名前です)構文から行ってきましたしかし、それはマイナーな問題です。面倒な価値はありません。

関連する問題