Rails通过求和自定义SQL调用选择和分组

时间:2011-10-24 19:47:20

标签: sql ruby-on-rails

我有一个名为sales的表,其中包含以下字段:

id (integer)
quantity (integer)
product_id (integer)
payment_method (string - bad I know)

我想将这些记录挂钩到google visual api,但首先我需要以我想要的方式实际获取数据。谷歌可视化集成不是问题。问题是我似乎无法使用group()函数或select()函数来执行我想要的操作。

我不确定该组是否是我想要的,但基本上我想按payment_method按每个产品进行销售总计。

我最初的想法是它看起来像

.select("SUM(quantity) as total_sold", :product_id).group(:payment_method)

但这并没有真正帮助我按产品排序。我希望数据看起来像是:

CASH SALES:
    Product A: 103 sales
    Product B: 32 sales
    Product C: 87 sales
CREDITCARD SALES:
    Product A: 23 sales
    Product B: 43 sales
    Product C: 12 sales
DONATION SALES:
    Product A: # sales
    Product B: 43 sales
    Product C: 12 sales

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

.select("SUM(quantity) as total_sold", :product_id).group(:payment_method, :product_id)

首先,它将按付款方式对结果集进行分组,然后按产品ID进行分组。

答案 1 :(得分:0)

保持一个字符串中所有列的选择。生成的SQL将“按原样”使用。无需关闭字符串并将第二个参数作为符号:product_id放入select中。 重要的是,也可以在select中添加group by中的所有列。 也请考虑.order("payment_method, product_id")

.select("SUM(quantity) as total_sold, payment_method, product_id").group(:payment_method, :product_id)

使用rails console进行测试:

Product.select("product_line_id, public_product_id pp_id, count(product_id) num_products") .group("product_line_id, public_product_id").map{|p| "Public Prod Id: #{p.pp_id} has #{p.num_products} products " }
  

产品负载(0.2ms)SELECT public_product_id pp_id,count(product_id)num_products FROM products GROUP BY productspublic_product_id   => [   “Public Prod Id:5有1件商品”,   “Public Prod Id:6有2个产品”,   “Public Prod Id:8有1个产品”,......]