Sql 基于布尔列的条件和

Sql 基于布尔列的条件和,sql,ruby-on-rails,postgresql,activerecord,rails-activerecord,Sql,Ruby On Rails,Postgresql,Activerecord,Rails Activerecord,我正在使用来构建图表: line_chart @product.stocks.group_by_date(:date).sum(:quantity) 这工作正常,但我得到了错误的数据,因为在stocks表中,quantity取决于中的另一列stock\u,它是布尔值 数量不能存储为负数,只支持正数 检索数量时我们检查中的库存值布尔值以计算产品数量之和 例子: 这里的数量是这样计算的:32+8-10=30 使用时 line_chart @product.stocks.group_by_dat

我正在使用来构建图表:

line_chart @product.stocks.group_by_date(:date).sum(:quantity)
这工作正常,但我得到了错误的数据,因为在
stocks
表中,
quantity
取决于
中的另一列
stock\u,它是
布尔值

  • 数量
    不能存储为负数,只支持正数
  • 检索
    数量时
    我们检查
    中的库存值
    布尔值以计算产品数量之和
例子: 这里的数量是这样计算的:
32+8-10=30

使用时

line_chart @product.stocks.group_by_date(:date).sum(:quantity)
2015年6月13日的工程量总和为40,这是错误的

我怎样才能修好它?比如:

line_chart @product.stocks.group_by_date(:date).sum { |s| s.stock_in? ? s.quantity : -1 * s.quantity }

您可以尝试以下操作:

@product.stocks.group_by_date(:date)
        .sum("case when stock_in then quantity else -quantity end")

您可以尝试以下操作:

@product.stocks.group_by_date(:date)
        .sum("case when stock_in then quantity else -quantity end")

如果要在PostgreSQL(而不是rails应用程序)中执行求和,可以执行以下操作:

line_chart @product.stocks
                   .group_by_date(:date)
                   .sum("quantity * (case stock_in when TRUE then 1 else -1 end)")

如果要在PostgreSQL(而不是rails应用程序)中执行求和,可以执行以下操作:

line_chart @product.stocks
                   .group_by_date(:date)
                   .sum("quantity * (case stock_in when TRUE then 1 else -1 end)")

你在使用什么数据库?MySQL?Postresql?您使用的是什么数据库?MySQL?Postresql?I'getting PG::GroupingError:ERROR:column“stocks.id”必须出现在GROUP BY子句中或用于聚合函数I'getting PG::GroupingError:ERROR:column“stocks.id”必须出现在GROUP BY子句中或用于聚合函数中。这属于数据库。这属于数据库端