2017-05-23 18 views
0

私はキャプチャしたいSQLクエリを持っています。ここでは、クエリは次のとおりです。find_by_sql(SUM(field))の結果を変数に格納するにはどうすればよいですか?

sl = SlocMetric.find_by_sql("select sum(code_added), 
    sum(comments_added), sum(blanks_added), sum(code_removed), 
    sum(comments_removed), sum(blanks_removed) from sloc_metrics 
     inner join diffs on diffs.id = sloc_metrics.diff_id 
     inner join commits on commits.id = diffs.commit_id 
    where commits.id = '499848202'") 

実際のSQLでこのクエリの出力は私にそうような4つの合計値のテーブル与える:

sum| sum| sum| sum| 
1  23 43 34 

を私は絶対にせずに、これらの値をキャプチャすることができる方法がありますActiveRecordを使用する必要があります。私は.sumメソッドがあることを知っていますが、これを使用するには、実際にActiveRecordでクエリを変更する必要があります。ヘルプをいただければ幸いです。ありがとうございました。

答えて

0

、すなわち:

sl = SlocMetric.find_by_sql("select sum(code_added) as sum_1, 
    sum(comments_added) as sum_2, sum(blanks_added) as sum_3, sum(code_removed) as sum_4, 
    sum(comments_removed) as sum_5, sum(blanks_removed) as sum_6 from sloc_metrics 
     inner join diffs on diffs.id = sloc_metrics.diff_id 
     inner join commits on commits.id = diffs.commit_id 
    where commits.id = '499848202'") 

結果はSlocMetricオブジェクトの配列であり、そしてあなたのような、各要素にそれにアクセスすることができなければならない:

sl[0].sum_1 
0

ActiveRecord::Base.connection.select_rows()を使用すると、配列の配列を返すことができます。各行は、SELECT値の配列で表されます。たとえば、あなたのケースでは、あなたが行います。

sl = ActiveRecord::Base.connection.select_rows("select sum(code_added), 
    sum(comments_added), sum(blanks_added), sum(code_removed), 
    sum(comments_removed), sum(blanks_removed) from sloc_metrics 
     inner join diffs on diffs.id = sloc_metrics.diff_id 
     inner join commits on commits.id = diffs.commit_id 
    where commits.id = '499848202'") 

と出力は次のようになります。

#=> [[1, 23, 43, 34]] 

あなたのクエリが一列のみを出力するので今、あなたは、s1[0]と値にアクセスすることができます

sl[0].inspect 
#=> "[1, 23, 43, 34]" 
あなたが各 sumに名前を付けることができ
関連する問題