これは、SQLクエリをグループ化する列を指定することで実現できます。
Danil Speransky氏のように、価格をどのように使用したいのかを含めなかったため、価格を合計したいシナリオを示します。
すべての日付、タイトルごとの価格と情報の合計を計算:あなたは、ループを通って、この
@reports.each_pair do |columns, sum_price|
[0] # date
[1] # title
[2] # info
sum_price # The sum of all prices
end
などのアクセス別のオプションは、選択クエリを構築することであろう可能性が
@reports = Report.select([:date, :title, :info]).group([:date, :title, :info]).sum(:price)
(4.1ms) SELECT SUM(`reports`.`price`) AS sum_price, date AS date, title AS title, info AS info FROM `reports` GROUP BY date, title, info
=> {["[date]", "[title]", "[info]"]=>1234,
["[date]", "[title2]", "[info]"]=>5678,
...
}
を手動でこのように
@reports = Report.select("SUM(`reports`.`price`) AS sum_price, date AS date, title AS title, info AS info").group([:date, :title, :info])
# Results in same SQL query, but will instantiate a model record for each row
=> [#<Report date: "2017-09-18", title: "[Title]", info: "[Info]">,
#<Report date: "2017-09-18", title: "[Title2]", info: "[Info]">,
...
]
また、検査されたレコードでは:sum_price
の列には、このようにアクセスできます。
@reports.each do |report|
report.date
report.title
report.info
report.sum_price
end
これはどういう意味ですか?同じタイトルと価格の異なる2つのレコードがあるとします。出力は何でしょうか?構築したいSQLを提供できますか? –