質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

0回答

2791閲覧

groupやgroup_byを用いて、集計処理を実装したいです。(月別集計処理)

qaz3330

総合スコア113

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/07/24 08:38

編集2016/07/24 08:44

月別に売上金額を集計し、画面に表示される処理を実装しております。

MonthReportに月毎の売上のレコードが入っております。

画面では

@reports = MonthReport.where(store_id: @user.stores.ids)

という風にしており、
ユーザーが保有している店舗で絞り込んだ、レポートを表示しているようにしております。

結果

#<MonthReport:0x007feaba88c668 id: 224, user_id: 2, store_id: 14, price: 2000, visit_count: 300, created_at: Sun, 24 Jul 2016 01:52:15 JST +09:00, updated_at: Sun, 24 Jul 2016 01:55:23 JST +09:00>, #<MonthReport:0x007feaba88c668 id: 225, user_id: 2, store_id: 15, price: 5000, visit_count: 400, created_at: Sun, 24 Jul 2016 01:52:15 JST +09:00, updated_at: Sun, 24 Jul 2016 01:55:23 JST +09:00>

今回やりたいこと

同じユーザーであれば、
店舗の売上(price)や訪問数(visit_count)の合計数を集計して、一レコードとして表示させることです。

※ また、今は、priceとvisit_countですが、今後、対象カラムは増える可能性あり。

試したこと

集計ということで調べていると、groupやgroup_byなどをつかって上手くできるのかと思い、いろいろと試しておりましたがダメでした。

@reports.group_by{|r|r.user_id}.each do |user| user.sum(:price) user.sum(:visit_count) end
@reports.group(:user_id).each do |user| user.sum(:price) user.sum(:visit_count) end

ユーザー毎でループしているのは、
運用側(私)が管理画面からみるときにも、ユーザー毎でみたいためです。

宜しくお願いします。

対象テーブル

| sales | CREATE TABLE `sales` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL, `sales_price` int(11) DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | | users | CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '', `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | | stores | CREATE TABLE `stores` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`), ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | MonthReport 'price' 'visit_count' 'store_id' 'user_id'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問