【问题标题】:How to select record from a table, where sum of a column equals a certain value?如何从表中选择记录,其中列的总和等于某个值?
【发布时间】:2017-05-08 06:50:24
【问题描述】:

我有一张桌子campaign

capaign_id | offers_count
-------------------------
1          |       1
2          |       1
3          |       4
4          |       3

我正在尝试选择 offer_count 之和等于 7 的广告系列,即广告系列 3 和 4。

【问题讨论】:

  • 您要查找offers_count 总和为7 的两个广告系列中的所有组合吗?
  • 或者你想从offers_count总和为7的所有广告系列中找到所有组合?
  • 不,我想选择 offer_count 总和为 7 的广告系列。@GurwinderSingh
  • 如果是你想要的所有广告系列,那么我认为你应该以程序的方式进行。
  • 是对的总和吗?或者如果您有 (5,1) 行,您想获取所有行 (capaign_id:1,2,5,4)、cos (1+1+1+4) 和 capaign_id(3,4) cos ( 3+4)?..然后你想要 capaign_id =3 两次吗?..

标签: sql ruby-on-rails postgresql activerecord


【解决方案1】:

一个可能的解决方案可能是

1) 采摘campaign_idoffers_count

YourModel.pluck(:offers_count)
#=> [[1,1], [2,1], [3,4], [4,3]]

2) 然后针对第二个元素解决子集和问题[保留第一个/第零个参考]

https://stackoverflow.com/a/19488950/4481312

下面的代码也来自 SO 帖子,但我现在无法找到该线程。

def subset_sum(array, tot)
  (1..array.size).each_with_object([]) do  |n,arr|
    array.combination(n).each { |a| arr << a if a[0][0].reduce(:+) == tot }
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 2016-07-12
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多