0

私はsqliteで動作する次のコード行を持っていますが、PostGresでは動作しません:

@income_by_category = SoldCategory.group(:category_name).having("branch_id=?", @branch_id).sum(:total).to_a

基本的に、同じ を持つすべてのSoldCategorybyをグループ化し、すべてのを追加して、配列に変換します。私はいくつかのチャートにいくつかのデータを提供するためにそれを使用しています。次のような結果が得られます。:category_name@branch_id:total

[['shoes', 5000], ['pants', 6000], ['shirts', 7000]]

PostGress を使用して同じ結果を得るにはどうすればよいですか?

4

1 に答える 1

1

sold_categories与えられたすべての を取得してから、branch_idカテゴリごとの合計を見つけたいですか? あなたのアプローチは少しずれています.HAVINGはあなたが探しているものではありません. 必要な SQL は次のとおりです。

select category_name, sum(total)
from sold_categories
where branch_id = ?
group by category_name

これは、ActiveRecord で次のように変換されます。

SoldCategory.where(:branch_id => @branch_id).sum(:total, :group => :category_name)

これにより、次のような素敵なハッシュが得られます。

{ 'shoes' => 5000, 'pants' => 6000, 'shirts' => 7000 }

これを修正したら、次のステップは開発環境に PostgreSQL をインストールして、同じデータベースを使用して開発および展開できるようにすることです。データベース間には、どの ORM も保護できない小さな違いがたくさんあります。データベースの移植性は、必要性がとてつもなく単純であるか、独自の移植性レイヤーを作成してテストする場合を除き、神話です約。

于 2013-09-17T22:02:15.293 に答える