2017-09-17 9 views
0

レール、私は、MySQLデータベースと、このコードを持っている:複数の列との明確な選択すると、右の今のmysql

Report.select('date, title, info').distinct 

をそれは、このSQLクエリに相当します。

SELECT DISTINCT 
    date, 
    title, 
    marketplace 
FROM 
    reports 

しかし、どのような場合、私は選択したいですdate, title and infoだけでなく、priceのような多くのパラメータがあります。しかし、私は結果が区別してほしいと思っています。date,title and info 私は何をしますか? 私はグループメソッドのどこかを掘ることを考えました。

+0

これはどういう意味ですか?同じタイトルと価格の異なる2つのレコードがあるとします。出力は何でしょうか?構築したいSQLを提供できますか? –

答えて

0

これは、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 
+0

これは私が必要とするものだと思いますが、少し後でこれを実装しようとします – user2950593

関連する問題