Rails MySQL子查询与算术

时间:2013-01-29 00:10:25

标签: mysql ruby-on-rails math count subquery

我有3个型号:

  1. 产品
  2. 每日记录
  3. 点击
  4. 表格如下:

    Products
    id
    

    Daily Logs
    id | product_id | price
    

    Clicks
    id | product_id | daily_log_id
    

    对于报告,我希望所有产品的累计成本超过x(基于每次点击价格)。

    在Ruby中,代码可能看起来像

    products.select do | p |
      cost = 0
      p.daily_logs.each do | dlog |
        cost += dlog.clicks.count * dlog.price
      end
    
      cost > x ? true : false      
    end
    

    我如何为mysql编写类似的查询?

    谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西:

SELECT dl.product_id AS `product_id`, COUNT(c.id) AS `total_clicks`, SUM(dl.price) AS `total_price`
FROM daily_logs AS dl
INNER JOIN clicks AS c on dl.id = c.daily_log_id
WHERE `total_price` > ?
GROUP BY `product_id`

注意我没有加入products表,因为它只有一个id字段,也可以在daily_logs表中找到。如果products表实际上有更多包含您需要的信息的字段,您也可以加入该表并选择所需的字段。